我需要在clr模式下的windows窗体项目中使用一些win32函数。(v c ++ 2005) 我直接在我的表单项目中使用win32函数时得到的错误是
**dbms.obj : error LNK2028: unresolved token (0A00000E) "extern "C" struct HWND__ * __stdcall GetForegroundWindow(void)" (?GetForegroundWindow@@$$J10YGPAUHWND__@@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
dbms.obj : error LNK2019: unresolved external symbol "extern "C" struct HWND__ * __stdcall GetForegroundWindow(void)" (?GetForegroundWindow@@$$J10YGPAUHWND__@@XZ) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)**
我的主要cpp代码是:
#include "stdafx.h"
#include "Form1.h"
#include "windows.h"
using namespace dbms;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
HWND neu;
neu=GetForegroundWindow();
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew Form1());
return 0;
}
代码只是为了演示我得到的错误。 这可能是愚蠢的,但我知道至少有一点关于win32 prog但没有关于.net平台。如果有人可以帮我在上面的代码中使用win32 func,那就不胜感激了。 (我没有包括form.h文件..我认为可能不需要)
答案 0 :(得分:1)
这是链接器错误,而不是编译错误。您需要告诉链接器在Windows导入库中搜索这些winapi标识符。
在“解决方案资源管理器”窗口的“属性”,“链接器”,“输入”,“其他依赖关系”设置中右键单击您的项目。删除$(NoInherit)。这允许使用“核心Windows库”项目属性表中的默认值,它指定最常见的Windows dll的.lib文件。包括user32.lib,声明GetForegroundWindow()的那个。
通过单击文本框中的虚线按钮,可以看到从项目属性表继承的.libs列表。 “继承值”列表。如果使用导入库不在列表中的“模糊”winapi,则需要将.lib的名称添加到该设置中。您需要的.lib在文章底部的“功能信息”部分中的winapi函数的MSDN Library文章中有记录。