Windows LNK2019定义UNICODE/\u UNICODE时
我使用的是TCHAR,当我定义UNICODE/\u UNICODE时出现了错误。这是我的密码 函数.h plugin.cpp 上面的代码会导致错误Windows LNK2019定义UNICODE/\u UNICODE时,windows,winapi,Windows,Winapi,我使用的是TCHAR,当我定义UNICODE/\u UNICODE时出现了错误。这是我的密码 函数.h plugin.cpp 上面的代码会导致错误 ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== LNK2019 unresolved external symbol "int __cdecl bLogging(char const *,...)" (?bLogging@@YA
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
LNK2019 unresolved external symbol "int __cdecl bLogging(char const *,...)" (?bLogging@@YAHPBDZZ) referenced in function "bool __cdecl pluginInit(struct PLUG_INITSTRUCT *)" (?pluginInit@@YA_NPAUPLUG_INITSTRUCT@@@Z)
但是如果没有UNICODE/_-UNICODE,它构建为ASCII字符,那么它工作得很好
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
雷蒙德的评论可能是正确的答案。否则,您的代码看起来很好 除非您试图为Windows 95提供向后兼容性支持,否则您不需要TCHAR宏。更简单的方法是避免使用这些内容,并使用
constwchar\u t*
或LPCWSTR
作为字符串类型
以调整代码为例:
函数.h
plugin.cpp
确保您进行了全面清理和重建,并注意
#include
,而不是function.h
。与单个头文件相比,在编译器设置中定义#全局变量(如
不起作用。我猜有人在包含标题之前已经做了一个和UNICODE
)通常更安全。添加了Windows和WinApi标记。移除C++标签。您可以从错误的MESASGE中看到,(UNICODE
LPCTSTR
仍然是ANSI < Code > char const */COD>,因此您的<代码>定义Unicode,所以你定义#include
太晚了。在我看来,UNICODE
做得对,但LPCTSTR
没有。发布时,代码不会产生错误。错误发生在我们看不见的地方。例如,使用预编译头是引入不匹配的预处理器符号的一种方法。我已经解决了我的问题。在定义UNICODE/\u UNICODE之前,我包括了windows.h。谢谢你的帮助,但我喜欢让代码同时使用wchar和char。实际上,在2020年没有合理的理由继续使用TCHAR宏。选择一个字符编码并坚持使用它。TEXT
#include "function.h" bool pluginInit(PLUG_INITSTRUCT* initStruct) { bLogging(TEXT("hello, world!")); }
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== LNK2019 unresolved external symbol "int __cdecl bLogging(char const *,...)" (?bLogging@@YAHPBDZZ) referenced in function "bool __cdecl pluginInit(struct PLUG_INITSTRUCT *)" (?pluginInit@@YA_NPAUPLUG_INITSTRUCT@@@Z)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
#pragma once #include <windows.h> BOOL bLogging(const wchar_t* szContent, ...);
#include "function.h" BOOL bLogging(const wchar_t* szContent, ...) { body of function }
#include "function.h" bool pluginInit(PLUG_INITSTRUCT* initStruct) { bLogging(L"Hello World"); }