Hm... dann hast du irgendetwas falsch geschrieben (denke ich mal...) Poste doch mal den Code, vllt. kann man was sehen...
Oder du hast das selbe Problem wie ich, womit ich zu einer guten Überleitung zu einer weiteren Frage in diesem Thread komme:
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:
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:
| 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); |