проблема совместимости с широкими строками в Delphi
-
20-09-2019 - |
Вопрос
В сборке dll с Delphi 2006
Foo(aPath: widestring);
begin
_rootPath := aPath;
end;
В исполняемом файле, созданном с помощью Delphi 2010
_Foo := GetProcAddress(FooModule,’Foo’);
_Foo(‘123456’);
Зайдя в библиотеку dll, aPath = '123'.На самом деле любая строка, которую я передаю, разрезается ровно пополам.
1.) Почему мое буквальное значение уменьшается вдвое?2.) Как мне это исправить?
Решение
Убедитесь, что параметр _Foo имеет значение widestring в 2010 году
Другие советы
WideStrings находятся в куче Windows и не управляются диспетчером памяти Delphi.Таким образом, WideStrings (в отличие от других типов длинных строк) могут без проблем использоваться совместно между exe и dll.
Я предполагаю, что вы получили неправильные данные, потому что WideString — это управляемый тип, а менеджер памяти для dll и исполняемого файла разные.Если вы можете перекомпилировать dll, сделайте тип aPath PWideChar.