在 VS 中使用 Windows API 调用时出现链接器错误C++

Linker errors in VS when using Windows API call in C++

本文关键字:链接 C++ 错误 调用 VS API Windows      更新时间:2023-10-16

我正在尝试掌握使用Windows API函数,但事实证明,使它们正常工作是困难的。

在VS2015中,每当我调用MessageBox()或类似内容时,我的C++代码当前都会产生链接器错误:

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace System;
int main()
{
    Console::WriteLine(L"Hello World");
    MessageBox(NULL, L"Stuff", L"Things", MB_OK | MB_ICONEXCLAMATION);
    return 0;
}

我收到的错误是未解析的令牌和未解析的外部符号,MessageBoxW出现在消息中。

错误消息之一:错误 LNK2028 未解析的令牌 (0A0004E9( "extern "C" int stdcall MessageBoxW(struct HWND *,wchar_t const *,wchar_t const *,unsigned int(" (?MessageBoxW@@$$J 216YGHPAUHWND__@@PB_W1I@Z( 在函数 "extern "C" int cdecl MessageBox(struct HWND *,wchar_t const *,wchar_t const *,unsigned int(" (?MessageBox@@$$J 0YAHPAUHWND__@@PB_W1I@Z(

你不小心创建了一个 .net 项目,这意味着你不会使用 Windows API,至少不会对项目进行一些更改。需要创建 Win32 项目,而不是 .net 项目。

在 C++/CLI 项目中使用 WinAPI 接口是完全可以的,如果你打算仅使用托管接口,则创建完全托管项目 (C#( 会更简单。

您在这里缺少的是链接器的库输入(User32.lib,如前面在注释中提到的那样(。

有关类似问题,请参阅从 .NET 调用本机 Win32 代码(C++/CLI 和 C#(。