проблема совместимости в Delphi - PullRequest
1 голос
/ 11 января 2010

В сборке dll с Delphi 2006

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

В исполняемом файле, построенном с Delphi 2010

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

Заходя в dll, aPath = '123'. Фактически любая строка, которую я передаю, разрезается ровно пополам.

1.) Почему мой литерал уменьшается вдвое? 2.) Как мне это исправить?

Ответы [ 3 ]

5 голосов
/ 11 января 2010

Убедитесь, что параметр _Foo является самой распространенной в 2010 году

2 голосов
/ 12 января 2010

WideStrings находятся в куче Windows и не управляются диспетчером памяти Delphi. Таким образом, WideStrings (в отличие от других типов длинных строк) могут быть совместно использованы exe и dll.

0 голосов
/ 12 января 2010

Полагаю, вы получаете неверные данные, потому что WideString - это управляемый тип, а диспетчер памяти для dll и исполняемого файла различны. Если вы можете перекомпилировать dll, сделайте тип aPath PWideChar

...