Frage

Ich habe eine einfache GUI mit Windows Forms in Visual C ++ erstellt 2008. Es gibt eine Schaltfläche in der GUI ist. Wenn die Taste gedrückt wird, möchte ich den Mauszeiger an den Koordinaten zu Punkt (0900). Ich habe separate Header und C ++ Quelldatei erstellt, die Mengen, die Cursorposition zu spezifizierten Ort (x, y). Dazu habe ich Win32 der SetCursorPos () Funktion verwendet. Ich schrieb den Code für die Cursorposition in einer separaten Datei einstellen, weil ich nur die GUI will .NET gebaut werden verwendet. Für andere Funktionen möchte ich native C ++ und Win32-Bibliothek verwenden.

Während der Code erstellen, erhalte ich folgende Fehlermeldung zum Zeitpunkt der Verlinkung:

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)
War es hilfreich?

Lösung

(? SetCursorPos @@ $$ J18YGHHH @ Z)

Beachten Sie, wie der Name der Funktion der C ++ Name Dekoration bekam. Ihre Erklärung der Funktion ist falsch, mit extern „C“ ist nicht erforderlich. Vermeiden Sie diese Art von Fehler, die von einfach einschließlich <windows.h>.

Aber, tut es nicht auf diese Weise. Windows Forms können Sie den Cursor bewegen zu:

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

wurde ich ernsthaft mit der Namen Dekoration der Irre geführt, dass eine unangenehme Linker Fehlermeldung ist. Das eigentliche Problem ist, dass Ihr Projekt nicht ist die Verknüpfung der erforderlichen Windows-Bibliothek importieren. Rechtsklick auf das Projekt, Eigenschaften, Linker, Input. Entfernen Sie die $ (NoInherit) von den Zusätzlichen Abhängigkeiten festlegen. Wenn Sie VS2010 verwenden dann in dieser Einstellung setzen „user32.lib“.

Sie sollten immer noch die .NET Cursor-Klasse in diesem speziellen Fall verwendet werden.

Andere Tipps

Sie können das nicht tun.

Wenn Sie C ++ .NET aus, müssen Sie eine C-Schnittstelle zu .NET belichten dem Sie P / Invoke, oder Sie benötigen C ++ / CLI anstatt zu verwenden, die in verwaltetem Code führen. (Na ja, ich nehme an Sie als auch ein COM-Element aussetzen könnte, aber das ist eine ganz andere Dose Würmer)

Das klingt wie Sie nur nach Schwierigkeiten zu fragen - gibt es keinen Grund Sie nicht wollen, entweder vollständig verwalteten Code oder vollständig nativen Code benutzen? Bekommt sie ist eine königliche PITA zu mischen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top