2010-01-11 12 views
1

Dans un dll construit avec Delphi 2006problème de compatibilité WideString dans Delphi

Foo(aPath: widestring); 
begin 
    _rootPath := aPath; 
end; 

Dans un exécutable construit avec Delphi 2010

_Foo := GetProcAddress(FooModule,’Foo’); 
_Foo(‘123456’); 

pas à pas dans la dll, aLigne = '123'. En fait, toute corde que je passe est coupée exactement en deux.

1.) Pourquoi mon être littéral est-il divisé par deux? 2.) Comment le réparer?

+4

Comment est déclaré _Foo dans D2010? –

+2

Veuillez copier et coller ** code réel ** depuis votre éditeur Delphi. Ce que vous avez posté n'est pas un code Delphi valide, et je suis donc sceptique quant à la précision avec laquelle vous avez représenté votre problème ici. Inclure les déclarations de fonction et de variable. –

+5

@ Mason Wheeler - À tort, apparemment. J'ai eu _Foo = procédure (aPath: chaîne). Merci. – DaiKiraii

Répondre

5

Assurez-vous que le paramètre _foo est un WideString en 2010

0

Je suppose que vous obtenez des données erronées, car WideString est un type géré et le gestionnaire de mémoire pour le dll et l'exécutable sont différents. Si vous pouvez recompiler la DLL, faites en sorte que le type aPath soit PWideChar

2

Les WideStrings résident dans le tas Windows et ne sont pas gérés par le gestionnaire de mémoire Delphi. Donc, WideStrings (contrairement à d'autres types de chaînes longues) peut être partagé entre exe et dll sans problèmes.