1

在使用 Delphi 2006 构建的 dll 中

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

在使用 Delphi 2010 构建的可执行文件中

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

进入 dll,aPath = '123'。事实上,我传递的任何字符串都会被准确地切成两半。

1.) 为什么我的字面量减半?2.) 我该如何解决?

4

3 回答 3

5

确保 _Foo 参数是 2010 年的宽字符串

于 2010-01-11T18:32:02.350 回答
2

WideStrings 驻留在 Windows 堆中,不受 Delphi 内存管理器的管理。因此 WideStrings(与其他长字符串类型不同)可以在 exe 和 dll 之间毫无问题地共享。

于 2010-01-12T03:22:26.863 回答
0

我想你得到了错误的数据,因为 WideString 是一种托管类型,并且 dll 和可执行文件的内存管理器是不同的。如果您可以重新编译 dll,则将 aPath 类型设为 PWideChar

于 2010-01-11T21:42:18.267 回答