Autor Beitrag
Tobias O
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 27.07.07 15:14 
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):
ausblenden 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:
ausblenden Quelltext
1:
CSerialInterface *mInterface;					


Der Aufruf unter C++ (wenns unter C# nur so einfach wäre *g* ):
ausblenden 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:

ausblenden Quelltext
1:
2:
[DllImport("SPLib.dll")]
public static extern UInt16 Echo(UInt16 echoCounter, bzte echoDataLength, [In, MarshalAs( UnmanagedType.FunctionPtr)] byte echoData);
Tobias O Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 28.07.07 14:41 
So... Ich habe es nun herausgefunden... Es ist nicht möglich mit C# auf die Klasse zuzugreifen, man muss ich zuerst eine weitere DLL in C++ schreiben, die auf die erste Klasse zugreift.

Aber trotzdem kommt eine weitere Frage: Weiß jemand, ob das im .NET 3.0 vllt. anders ist?

Ein gutes Tutorial zum Thema gibt es hier (falls mal jemand das selbe problem hat und die Suchfunktion benutzt): codeguru.earthweb.co...icle.php/c6867/#more
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 28.07.07 14:44 
user profile iconTobias O hat folgendes geschrieben:
Aber trotzdem kommt eine weitere Frage: Weiß jemand, ob das im .NET 3.0 vllt. anders ist?
.NET 3.0 ist gegenüber zu 2.0 nur eine Erweiterung der Klassenbibliothek, das wird also nicht anders sein.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 28.07.07 21:00 
user profile iconTobias O hat folgendes geschrieben:
Weiß jemand, ob das im .NET 3.0 vllt. anders ist?
Eine unmanaged Instanz direkt wie ein CLR-Objekt zu behandeln wirst du wohl in jeder kommenden Version vermissen. C++/CLI gibt es jedoch bereits seit VS 2005 :zwinker: .