WINDOWS API 无法解析外部符号
WINDOWS api can't resolve external symbol
有人知道为什么会发生这种情况吗?
#define _x64
#include <Windows.h>
#include <iostream>
#include <windef.h>
#include <Winuser.h>
#include <tchar.h>
using namespace std;
int WINAPI MessageBoxW(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);
int main(){
std::cout << MessageBoxW(NULL, L"", L"", 0);
}
我使用微软(R(增量链接器14.00.24215.1版进行编译/EHsc";在命令行上的选项用于命令行输入"0";cl/EHsc winbasicb.cpp";。我没有做任何我觉得新奇的事。只需使用/EHsc选项进行优化编译和链接。
我收到这个错误。
/out:winbasicb.exe
winbasicb.obj
winbasicb.obj : error LNK2019: unresolved external symbol __imp_MessageBoxW referenced in function main
winbasicb.exe : fatal error LNK1120: 1 unresolved externals
我读取错误:无法转换';const wchar_t[13]';到';LPCSTR{aka const char*}';在赋值中,但这没有帮助,因为他们得到了编译器错误,但我得到了链接器错误。在这个问题中,错误是由于使用了MessageBoxW(..., "", "", ...)
而不是MessageBoxW(..., L"", L"", ...)
,但我应该使用L""
,但我遇到了链接器错误。
在Windows中,几乎所有的Windows API函数都有两个版本。
如果您看到本参考页的"需求"部分,您将看到有一个MessageBoxW
和一个MessageBoxA
功能。符号MessageBox
是被定义为取决于UNICODE
宏的实际函数之一的宏。
MessageBoxW
函数希望字符串是宽字符串,这就是您传递的字符串。不幸的是,您似乎没有正确的Unicode设置,因此使用ANSI(窄字符,纯char
(版本MessageBoxA
。
有两种解决方案:要么确保您有正确的Unicode设置。或者通过显式调用MessageBoxW
。或者不要使用宽字符串(即去掉L
前缀(。
您正在调用MessageBox()
的TCHAR
版本。转换错误消息抱怨您正在将Unicode字符串传递给MessageBoxA()
,而CCD_15需要Ansi字符串。这意味着您的项目是在未定义UNICODE
的情况下编译的,因此TCHAR
映射到char
,MessageBox()
映射到CCD20。但是L
前缀用于创建Unicode文字,而不是Ansi文字。
将字符串文字传递给基于TCHAR
的函数时,请使用TEXT()
宏来确保正确的字符编码:
int msgboxID = MessageBox(
NULL,
TEXT("temp.txt already exists.nDo you want to replace it?"),
TEXT("Confirm Save As"),
MB_ICONEXCLAMATION | MB_YESNO
);
否则,请远离TCHAR
函数(TCHAR
只能在编译Win9x/ME和NT4+Windows系列的相同代码库时使用(,直接使用Ansi或Unicode函数:
int msgboxID = MessageBoxA(
NULL,
"temp.txt already exists.nDo you want to replace it?",
"Confirm Save As",
MB_ICONEXCLAMATION | MB_YESNO
);
int msgboxID = MessageBoxW(
NULL,
L"temp.txt already exists.nDo you want to replace it?",
L"Confirm Save As",
MB_ICONEXCLAMATION | MB_YESNO
);
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector