C++ 中的光标位置 GetCursorPos() 返回链接错误

问题描述 投票:0回答:1

尝试让它发挥作用 使用 VisualStudio VC++ 我试图检测光标的位置,获取 x 和 y 并将其用于其他用途,但无论如何 - 都会发生链接错误。

public: System::Void pictureDrag_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
            POINT coord;
            GetCursorPos(&coord);
            int xx = coord.x, yy = coord.y;
            pictureBox2->Location = Drawing::Point(xx, yy); 
        }

给我这两个链接错误

Stuff.obj : error LNK2028: unresolved token (0A000011) "extern "C" int __stdcall GetCursorPos(struct tagPOINT *)" (?GetCursorPos@@$$J14YGHPAUtagPOINT@@@Z) referenced in function "public: void __clrcall Stuff::Form1::pictureDrag_MouseDown(class System::Object ^,class System::Windows::Forms::MouseEventArgs ^)" (?pictureDrag_MouseDown@Form1@Stuff@@$$FQ$AAMXP$AAVObject@System@@P$AAVMouseEventArgs@Forms@Windows@4@@Z)
Stuff.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall GetCursorPos(struct tagPOINT *)" (?GetCursorPos@@$$J14YGHPAUtagPOINT@@@Z) referenced in function "public: void __clrcall Stuff::Form1::pictureDrag_MouseDown(class System::Object ^,class System::Windows::Forms::MouseEventArgs ^)" (?pictureDrag_MouseDown@Form1@Stuff@@$$FQ$AAMXP$AAVObject@System@@P$AAVMouseEventArgs@Forms@Windows@4@@Z)

请注意,有一个 #包括 一开始我也尝试将 user32.lib 包含到项目中,但没有任何结果。代码本身太简单了,以至于错过了一些大的东西,看起来我忘记了包含一些东西,但就是不知道是什么。我是 C++ 新手,我们很快就要分手了!一旦我弄清楚这个问题。

满世界寻求帮助,再也无法忍受了。请帮助一个白痴!

visual-c++ linker cursor c++-cli
1个回答
0
投票

代码本身太简单了,以至于错过了一些大东西

函数声明位于头文件中,但该函数的主体(定义)是单独构建的(在 lib 文件或 dll 文件中)。为了工作,您的项目还需要包含该函数所需的一些 lib 文件。 在这种情况下,WinUser.h 中的 GetCursorPos() 函数和其他函数(已包含在 Windows.h 中)需要 user32.lib 才能工作。

通常情况下,所有重要的东西,比如所有与 Windows 相关的东西,都默认包含在内。如果有些原因(通过弄乱项目属性或其他任何东西),您将不得不手动执行此操作。

这可以通过简单地在使用 #include 之后放置 #pragma comment(lib, "lib name") 来实现,将 lib name 替换为所需的 lib 文件的正确名称。在这种情况下,#pragma comment(lib, "user32.lib") 就像 Chris 上面提到的那样。

或者,如果您使用 Visual Studio,请右键单击您的项目 -> 选择列表末尾的“属性”选项。

请记住选择您的项目使用的正确配置和平台。 然后在配置选项卡中,nagavite 到链接器 -> 输入。默认情况下,它应该包含附加依赖项中的所有重要内容,如下所示:

如果不是,请左键单击字段 -> 单击箭头。如果列表中显示“从父级或项目默认值继承”,请选择并应用,它应该包含适合您的所有内容:

或者选择编辑,然后在白色字段中输入所需的库名称,用退格键分隔,如下所示:

或者勾选复选框,它将为您包含继承值字段中的所有内容。然后点击“确定”->“应用”。

© www.soinside.com 2019 - 2024. All rights reserved.