WideString problema di compatibilità in Delphi
-
20-09-2019 - |
Domanda
In un accumulo DLL con Delphi 2006
Foo(aPath: widestring);
begin
_rootPath := aPath;
end;
In un eseguibile costruito con Delphi 2010
_Foo := GetProcAddress(FooModule,’Foo’);
_Foo(‘123456’);
Facendo un passo nel dll, alinea = '123'. In realtà qualsiasi stringa passo viene tagliato esattamente a metà.
1). Perché è il mio letterale viene dimezzato? 2.) Come posso risolvere il problema?
Soluzione
Assicurati che il parametro _foo è un WideString nel 2010
Altri suggerimenti
WideStrings risiedono in mucchio di Windows e non sono gestiti dal gestore di memoria Delphi. Così WideStrings (a differenza di altri tipi lungo arco) possono essere condivisi tra EXE e DLL senza problemi.
Suppongo che si ottiene i dati errati a causa WideString è un tipo gestito e il gestore della memoria per la DLL e l'eseguibile sono diversi. Se è possibile ricompilare la DLL rendere tipo alinea essere PWideChar