Autor Beitrag
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Fr 22.11.13 18:52 
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 rausgesucht.
Das exportieren ansich funktioniert auch. Ich muss nun (vereinfacht) folgende Funktionen exportieren (das sind die aufrufe in delphi):

ausblenden 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..7of 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  // Wie records übergeben?
function  Open(var ID:Rec):PChar256; stdcall   // Wie PChar ausgeben?


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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 26.11.13 00:00 
Kann mir denn niemand gelfen?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 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).

Für diesen Beitrag haben gedankt: Boldar