Entwickler-Ecke
Basistechnologien - PChar und marshalling
Boldar - Fr 22.11.13 18:52
Titel: PChar und marshalling
Hi,
ich muss in C# eine dll erstellen, die aus einer (existierenden) Delphi-Anwendung aufgerufen werden soll.
Da ich ungern den weg über eine Proxy-dll gehen möchte, habe ich mir
dieses projekt [
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports] rausgesucht.
Das exportieren ansich funktioniert auch. Ich muss nun (vereinfacht) folgende Funktionen exportieren (das sind die aufrufe in delphi):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| Msg = record a: dword; b: Array [0..7] of byte; c: word; F: byte; t: TDateTime; end;
eeptype = record ID: dword; Version: dword; Date: PChar32; PStr: PChar32; CStr: PChar32; end; ...
function GetInfo(ID:Rec): eeptype; stdcall function Open(var ID:Rec):PChar256; stdcall |
Da habe ich die genannten probleme. Könnte mir da jemand ein Beispiel geben zu?
lg Boldar
Edit: das Delphi war Delphi7, also nicht-unicode.
Boldar - Di 26.11.13 00:00
Kann mir denn niemand gelfen?
Th69 - Di 26.11.13 11:47
Hallo,
ich probiere es mal (zumindestens mit
helfen ;-)...
PChar ist doch einfach ein Zeiger auf einen nullterminierten String (C-String), oder?
Dann kannst du in C# dafür einfach
string benutzen (der .NET Marshaller macht dies bei C-DLLs, z.B. bei WinAPI Aufrufen, genauso).
Was meinst du aber mit 'Rec'? Soll dies der Msg-Record sein?
P.S: Generell zum Marshallen kann ich dir den
PInvoke Interop Assistant [
http://clrinterop.codeplex.com/releases/view/14120] empfehlen. Du müsstest dann nur deine Delphi-Records in ein C-Struct umschreiben. Dann erzeugt dir der "PInvoke Interop Assistant" den nötigen C#-Code, denn du dann evtl. noch ein bißchen anpassen mußt (falls die Datentypen doch nicht exakt stimmen).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!