【发布时间】:2021-09-20 00:26:41
【问题描述】:
我不能在 clr 项目中使用 FindWindowA,因为它给了我一堆错误,这是我的代码。
我正在尝试为游戏制作教练。
就是这样,当你左键单击按钮时,它会找到窗口
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
HWND hwnd = FindWindowA(NULL, "Random process");
}
但是,当我运行它时,我得到 2 个未解析的外部符号,这些是错误
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "extern "C" struct HWND__ * __stdcall
FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z) referenced in
function "private: void __clrcall Project1::MyForm::button1_Click(class System::Object ^,class
System::EventArgs ^)" (?
button1_Click@MyForm@Project1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) Project1
C:\Users\user\source\repos\Project1\Project1\MyForm.obj 1
Severity Code Description Project File Line Suppression State
Error LNK2028 unresolved token (0A000273) "extern "C" struct HWND__ * __stdcall
FindWindowA(char const *,char const *)" (?FindWindowA@@$$J18YGPAUHWND__@@PBD0@Z) referenced in
function "private: void __clrcall Project1::MyForm::button1_Click(class System::Object ^,class
System::EventArgs ^)" (?
button1_Click@MyForm@Project1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) Project1
C:\Users\user\source\repos\Project1\Project1\MyForm.obj 1
【问题讨论】:
-
可能与错误无关,但为什么不是
FindWindowW? -
抱歉不知道有什么区别,如果不麻烦你介意解释一下吗?
-
@JoeMama
FindWindowA()用于 ANSI 字符串,FindWindowW()用于 Unicode 字符串。至于链接器错误,您是在User32.lib中链接吗?或者,您是否使用 PInvoke 联系FindWindow? -
我使用 Windows.h 和 TlHelp32.h 作为我的#includes 但是如果这不是你的意思,我不知道你在说什么我很抱歉
-
FindWindowA在哪里?链接器(这是错误的来源)基本上是在问这个问题,因为您没有提供该函数在哪里找到的指示(这是User32.lib发挥作用的地方)。当你编译程序时,头文件所做的就是告诉编译器“在某处有一个名为FindWindowA的函数,所以编译时没有错误并相信程序员”。所以编译器是成功的——但是链接器是真正想知道函数驻留在哪里的那个,因此在链接时出错。