我已经使用Visual C ++ 2008中的Windows表单创建了一个简单的GUI。GUI中有一个按钮。按下按钮时,我希望鼠标光标指向坐标(0,900)。我创建了单独的标头和C ++源文件,该文件将光标位置设置为指定位置(x,y)。为此,我使用了Win32的SetCursorPos()函数。我编写了用于在单独文件中设置光标位置的代码,因为我只希望使用.NET构建GUI。对于其他功能,我想使用本机C ++和Win32库。

在构建代码时,我在链接时会得到以下错误消息:

1>SimpleForms.obj : error LNK2028: unresolved token (0A00000F) "extern "C" int __stdcall SetCursorPos(int,int)" (?SetCursorPos@@$$J18YGHHH@Z) referenced in function "private: void __clrcall SimpleForms::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@SimpleForms@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)

1>SimpleForms.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall SetCursorPos(int,int)" (?SetCursorPos@@$$J18YGHHH@Z) referenced in function "private: void __clrcall SimpleForms::Form1::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@Form1@SimpleForms@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
有帮助吗?

解决方案

(?setCursorpos @@ $$ j18yghhh@z)

注意该功能名称如何获得C ++名称装饰。您对功能的声明是错误的,需要使用外部“ C”。简单地包括 <windows.h>.

但是,不要这样做。 Windows表单也使您也可以移动光标:

    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
        System::Windows::Forms::Cursor::Position = Point(0, 900);
    }

我被称呼装饰的名字严重误导,这是一个令人不快的链接错误消息。真正的问题是您的项目没有链接所需的Windows导入库。右键单击项目,属性,链接器,输入。从其他依赖项设置中删除$(Noinherit)。如果使用VS2010,则将“ user32.lib”放在该设置中。

在这种特定情况下,您仍然应该使用.NET光标类。

其他提示

你不能那样做。

如果要从.NET使用C ++,则必须将C接口公开为.NET,您可以P/Indoke,或者需要使用C ++/CLI,这将导致托管代码。 (好吧,我想您也可以揭露COM元素,但这是其他一罐蠕虫)

这听起来好像您只是在要求困难 - 有什么原因您不想使用完全管理的代码或完全本机代码?让他们混合是一个皇家皮塔饼。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top