Ich habe eine C++ DLL (gleich vorweg, ich habe sehr schlechtes C++ Wissen), welche in einer Klassenstruktur aufgebaut ist. Nun will ich ein Tool in C# schreiben, welches auf die DLL zugreift und alles daraus benutzen kann.
Ich habe einen C++ Code, worin einfach ein Objektpointer angelegt wird, mit dem dann gearbeitet wird. Wie kann ich mir ein Objekt der Klasse anlegen? Oder gibt es wenigstens einen Weg auf die Funktionen zuzugreifen, auch wenn ich kein Objekt anlegen kann?
Hier ein paar Code Snippets aus C++:
Die Funktion in der DLL, welche ich aufrufen will (Handle ist nur ein u_16):
Quelltext
1:
| Handle CSerialInterface::Echo(u_16 echoCounter, u_8 echoDataLength, const u_8 *echoData) |
Das Erstellen des Objektes unter C++ in der Headerdatei der MainForm:
Quelltext
1:
| CSerialInterface *mInterface; |
Der Aufruf unter C++ (wenns unter C# nur so einfach wäre *g* ):
Quelltext
1: 2:
| mInterface->Echo(0,0,NULL); |
Ich probiere da jetzt schon lange dran rum. Das Liebste wäre mir, wenn ich die Funktion direkt aufrufen könnte... Aber das ist nicht so leicht. Das schlimme ist ja, dass ich das mit dem Mobile Framework mache, wo man bei einer Fehlermeldung nichts gesagt bekommt
(NotSupportedException)
Das nächste Problem wird durch den Pointer im Funktionsaufruf gestellt, aber ich glaube das müsste ich damit hinbekommen haben:
Quelltext
1: 2:
| [DllImport("SPLib.dll")] public static extern UInt16 Echo(UInt16 echoCounter, bzte echoDataLength, [In, MarshalAs( UnmanagedType.FunctionPtr)] byte echoData); |