Вопрос

В сборке 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top