Я искал _vsnprintf
и узнал, что он доступен в файлах ntdll.dll и msvcrt.dll.Как определить, какая DLL Windows используется для вызова функции?
я могу использовать GetModuleHandle
и GetProcAddress
для доступа _vsnprintf
, например:
static int(__cdecl *p__vsnprintf)(char *str, size_t count, const char *format, va_list valist);
static void init(const char *dll)
{
HMODULE hmod = GetModuleHandleA(dll);
if (hmod)
{
printf("*** Testing %s ***\n", dll);
p__vsnprintf = (void *)GetProcAddress(hmod, "_vsnprintf");
if (p__vsnprintf) test__vsnprintf();
else printf("_vsnprintf not found in %s.\n", dll);
}
else printf("*** Unable to load %s ***\n", dll);
printf("\n");
}
int main(void)
{
init("ntdll.dll"); /* ntdll _vsnprintf */
init("msvcrt.dll"); /* msvcrt _vsnprintf */
printf("*** Testing normal function call ***\n");
test_vsnprintf(); /* _vsnprintf in ??? */
return 0;
}
Для общего вызова, как я могу сказать, является ли ОС Windows с помощью _vsnprintf
из ntdll.dll или MSVCRT.DLL?
Спасибо, что указали программу 'dumpbin'. Вывод показал, что '_vsnprintf' вызывается только из msvcrt.dll. Мне пришлось использовать его с VS2010. Доступно ли это с VS2013? –
Если вы имеете в виду 'dumpbin', доступный с VS2013, то да. 'dumpbin' - это просто небольшая программа-оболочка, которая вызывает' link/dump'. –