Verwenden von Funktionen aus dll
-
Hallo,
wie kann ich Funktionen aus einer fremden dll verwenden?
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { EposCmd::Net::DeviceCmdSet::Operation::StateMachine::SetQuickStopState(); }
Die dll ist mit #using <EposCmd.Net.dll> eingebunden. Leider funktioniert das so wie in dem Beispiel oben nicht.
Wie kann man hier im Forum einen Dateianhang machen?. Dann könnte ich die dll mal mitschicken.
Danke für die Hilfe
-
Wenn es sich um eine .NET-Assembly handelt, muss Du diese in den Projekteeinstellungen unter "Reference" einfügen. Dann geht es.
-
Die Bibliothek ist unter Projekte->Eigenschaften->Allgemeine Eigenschaften als Verweis eingetragen. Ist es das, was Du meintest?
Das funktioniert so trotzdem noch nicht.
-
WAS funktioniert nicht? Fehlermeldung?
-
Die Fehlermeldung ist:
error C2352: 'EposCmd::Net::DeviceCmdSet::Operation::StateMachine::SetQuickStopState': Unzulässiger Aufruf einer nicht statischen Memberfunktion
-
Das sagt doch schon alles, oder?
Unzulässiger Aufruf einer nicht statischen Memberfunktion
Du musst eine Instanz von "StateMachine" anlegen, damit Du diese Methode aufrufen kannst....
Aber ich Rate Dir dringen von C++/CLI ab!!!
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
-
Ja, da hast Du sicherlich Recht. Aber ich habe mich bereits vor einiger Zeit für diese Sprache festgelegt und auch schon ein Buch gekauft.
Ich habe es jetzt so gelöst, der Compiler bringt keinen Fehler mehr:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { StateMachine ^ Instanz_SM; Instanz_SM->SetQuickStopState(); }
Kannst Du mir bitte nochmal genauer erklären, warum ich zuerst eine Instanz anlegen muss? Anscheinend habe ich das noch nicht richtig verstanden.
-
micsch schrieb:
Ja, da hast Du sicherlich Recht. Aber ich habe mich bereits vor einiger Zeit für diese Sprache festgelegt und auch schon ein Buch gekauft.
Das ist kein Grund, nicht zu wechseln. Der Wechsel nach C# beispielsweise dürfte kein großer Akt sein. Du wirst mit C# meist einfacher ans Ziel kommen. Außerdem kennst du die .Net-Klassen ja schon (teilweise), die wirst du da wiedersehen. Und das Buch... tja, ich habe auch schon Bücher fehlgekauft. Who cares?
-
Ich werde es mir nochmal überlegen.
Zum obigen Problem:private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { StateMachine ^ Instanz_SM; Instanz_SM->SetQuickStopState(); }
Dies bewirkt einen Programmabsturz.
Hingegen dieser Code funktioniert:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { DeviceManager ^ connector = gcnew DeviceManager(); Device ^ epos = connector->CreateDevice(1/*node id*/); StateMachine ^ Instanz_SM = epos->Operation->StateMachine; Instanz_SM->SetQuickStopState(); }
Was passiert in diesem Code genau? Ich habe das aus einem Beispielcode und für meine Anforderungen entsprechend abgeändert. Leider wird hierbei immer die Kommunikation (über USB) neu aufgebaut.
-
In C++/CLI kann man nicht programmieren lernen! Du machst Dir das leben selber schwer... C++/CLI ist eine *InterOp* Sprache die man nur verwendet, wenn man *sehr gut* programmieren kann!
Nimm bitte C#...