Ich habe versucht, Informationen von einer EXE, die in Delphi geschrieben wurde, zu erhalten. Die EXE gibt mir einen Zeiger auf einer seiner Datenstrukturen:Delphi WideString in Visual Studio MFC
Type
RecordType = Record
St: WideString;
Next: Pointer;
End;
Var
DataRec: ^RecordType;
So in Visual Studio MFC ich einen Datentyp deklariert haben, die ähnlich sein sollte:
struct RecordRec
{
BSTR St;
void *Next;
};
RecordRec *DataRec;
Die Delphi-Hilfe sagt, dass ein Wide ist kompatibel mit einem BSTR, dies funktioniert jedoch nicht. Wenn ich meine St in Debug-Modus aussehen sagt es
"0x0000000000000000 <Bad Ptr> wchar_t *"
Ich weiß nicht, wie das Äquivalent eines Wide in Visual Studio MFC zu erklären.
Wenn es ein Short ist ich würde erklären:
struct RecordRec
{
BYTE StLen;
char St[255];
void *Next;
};
aber für einen Wide nicht funktioniert und ich, ich glaube wirklich nicht, eine Variable mit ~ 2^30 (1073741824) Zeichen erklären sollte in es.
Was fehlt mir? Ich hoffe wirklich, dass jemand helfen kann.
Pointer .... In dessen Adressraum? Mit welcher Methode wird ein Zeiger gesendet? – MBo
Es ist sehr kompliziert. Die erste Sache ist, dass es einen Windows Service gibt. Der Dienst wird automatisch gestartet und ausgeführt, wenn Windows gestartet wird. Wenn das Delphi-EXE ausgeführt wird, ruft es eine Funktion in einer DLL auf, die Teil des Diensts ist, und übergibt dem Dienst einen Zeiger auf seine Daten. Das Visual Studio MFC-Programm ruft dann eine Funktion in dem Dienst auf, um eine Kopie des Zeigers zu erhalten. Wenn es jedoch zu meinem MFC-Programm kommt, sehe ich Bad Ptr. Das alles funktionierte, wenn ein ShortString verwendet wurde, aber dann wurden die Dinge zu einem WideString aktualisiert und ich weiß nicht, was die entsprechende Deklaration in MFC wäre. – Gary
Fügen Sie alle Details im Fragenhauptteil hinzu. Sie sind von entscheidender Bedeutung. Das Übergeben des WideString-Typs an/von DLL ist ein richtiger Ansatz, aber beschreiben Sie alle Umstände – MBo