Windows LNK2019定义UNICODE/\u UNICODE时

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

我使用的是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@@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
(UNICODE
)通常更安全。添加了Windows和WinApi标记。移除C++标签。您可以从错误的MESASGE中看到, LPCTSTR 仍然是ANSI < Code > char const */COD>,因此您的<代码>定义Unicode
不起作用。我猜有人在包含标题之前已经做了一个
#include
,所以你定义
UNICODE
太晚了。在我看来,
LPCTSTR
做得对,但
TEXT
没有。发布时,代码不会产生错误。错误发生在我们看不见的地方。例如,使用预编译头是引入不匹配的预处理器符号的一种方法。我已经解决了我的问题。在定义UNICODE/\u UNICODE之前,我包括了windows.h。谢谢你的帮助,但我喜欢让代码同时使用wchar和char。实际上,在2020年没有合理的理由继续使用TCHAR宏。选择一个字符编码并坚持使用它。
#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");
}