在windows窗体项目中使用win32函数。(。net envir)

时间:2011-03-08 12:40:26

标签: winapi

我需要在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文件..我认为可能不需要)

1 个答案:

答案 0 :(得分:1)

这是链接器错误,而不是编译错误。您需要告诉链接器在Windows导入库中搜索这些winapi标识符。

在“解决方案资源管理器”窗口的“属性”,“链接器”,“输入”,“其他依赖关系”设置中右键单击您的项目。删除$(NoInherit)。这允许使用“核心Windows库”项目属性表中的默认值,它指定最常见的Windows dll的.lib文件。包括user32.lib,声明GetForegroundWindow()的那个。

通过单击文本框中的虚线按钮,可以看到从项目属性表继承的.libs列表。 “继承值”列表。如果使用导入库不在列表中的“模糊”winapi,则需要将.lib的名称添加到该设置中。您需要的.lib在文章底部的“功能信息”部分中的winapi函数的MSDN Library文章中有记录。