Domanda

Ho creato un'interfaccia grafica semplice utilizzando Windows Form in Visual C ++ 2008. C'è un pulsante nella GUI. Quando si preme il pulsante che voglio cursore del mouse per punto alle coordinate (0.900). Ho creato intestazione separata e file sorgente C ++ che imposta la posizione cursore posizione specificata (x, y). Per questo ho usato la funzione () SetCursorPos di Win32. Ho scritto il codice per impostare la posizione del cursore in un file separato perché voglio solo la GUI per essere costruito utilizzando .NET. Per le altre funzioni che voglio usare nativo C ++ e Win32 biblioteca.

Mentre la costruzione del codice, ottengo i seguenti messaggi di errore al momento del collegamento:

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)
È stato utile?

Soluzione

  

(? SetCursorPos @@ $$ J18YGHHH @ Z)

Si noti come il nome della funzione ha il nome decoro C ++. La vostra dichiarazione della funzione è sbagliato, utilizzando extern "C" è richiesto. Evitare questo tipo di errori, semplicemente includendo <windows.h>.

Ma, non farlo in questo modo. Windows Forms permette di spostare il cursore anche:

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

Sono stato seriamente fuorviato dalla decorazione nome, questo è un messaggio di errore linker sgradevole. Il vero problema è che il progetto non è il collegamento della libreria di importazione di Windows richiesto. Fare clic con il progetto, Proprietà, Linker, Input. Rimuovere il $ (noInherit) dalle Dipendenze aggiuntive di impostazione. Se si utilizza VS2010 poi mettere "user32.lib" in quel contesto.

Si dovrebbe comunque utilizzare la classe .NET cursore in questo caso specifico.

Altri suggerimenti

Non puoi farlo.

Se si desidera utilizzare C ++ da .NET, è necessario esporre un'interfaccia C per .NET che è possibile P / Invoke, oppure è necessario utilizzare C ++ / CLI, invece, che si tradurrà in codice gestito. (Beh, suppongo che si possa esporre un elemento com così, ma questo è tutto un altro vaso di Pandora)

Questo suona come si sta solo chiedendo difficoltà - c'è qualche ragione non si desidera utilizzare il codice o completamente gestito, o un codice completamente nativo? Inducendole a mescolare è una valle di lacrime reale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top