Widekompatibilitätsproblem in Delphi
-
20-09-2019 - |
Frage
In einer dll Build mit Delphi 2006
Foo(aPath: widestring);
begin
_rootPath := aPath;
end;
In einem ausführbaren gebaut mit Delphi 2010
_Foo := GetProcAddress(FooModule,’Foo’);
_Foo(‘123456’);
Der Schritt in die dll, aPath = '123'. In der Tat wird jede Saite, die ich passiere Schnitt genau in zwei Hälften.
1.) Warum ist mein wörtliches Wesen halbiert? 2.) Wie kann ich das Problem beheben?
Lösung
Stellen Sie sicher, dass der _foo Parameter ist ein Wide 2010
Andere Tipps
residieren Wide in Haufen von Windows und nicht von Delphi Speichermanager geführt werden. So Wide (im Gegensatz zu anderen langen String-Typen) zwischen exe und dll problemlos geteilt werden.
Ich nehme an, Sie falsche Daten erhalten, weil Wide einen verwalteten Typ und die Speicher-Manager für die DLL sind und die ausführbare Datei ist unterschiedlich. Wenn Sie die dll make aPath Typ neu kompilieren kann PWideChar
sein