在包含muiload.h
并与muiload.lib
关联并在 Visual Studio 2015 中调用LoadMUILibrary
时,我正在尝试下一个错误:
Muiload.lib(muiload.obj):错误LNK2019:未解析的外部符号 __vsnwprintf在函数“long __stdcall StringVPrintfWorkerW”中引用(unsigned short *,unsigned int,unsigned int *,unsigned short const *,char *)“(?StringVPrintfWorkerW @@ YGJPAGIPAIPBGPAD @ Z)
muiload.lib
可能有问题吗?
答案 0 :(得分:13)
解决了将附加库 legacy_stdio_definitions.lib 添加到链接器输入的问题,如https://social.msdn.microsoft.com/Forums/en-US/5150eeec-4427-440f-ab19-aecb26113d31/updated-to-vs-2015-and-now-get-unresolved-external-errors?forum=vcgeneral
中所述答案 1 :(得分:0)
链接到legacy_stdio_definitions.lib
的另一种方法是重新定义这些函数签名以匹配其不赞成使用的样式:
int (WINAPIV * __vsnprintf)(char *, size_t, const char*, va_list) = _vsnprintf;
int (WINAPIV * __vsnwprintf)(wchar_t *, size_t, const wchar_t*, va_list) = _vsnwprintf;
这样做的一个好处是,它避免了由于包含旧版库而导致的其他可能的链接器定义问题。
请注意,这应该在编译器单元(.cpp)中定义,而不是在头文件中定义。