在使用 Delphi 2006 构建的 dll 中
Foo(aPath: widestring);
begin
_rootPath := aPath;
end;
在使用 Delphi 2010 构建的可执行文件中
_Foo := GetProcAddress(FooModule,’Foo’);
_Foo(‘123456’);
进入 dll,aPath = '123'。事实上,我传递的任何字符串都会被准确地切成两半。
1.) 为什么我的字面量减半?2.) 我该如何解决?
在使用 Delphi 2006 构建的 dll 中
Foo(aPath: widestring);
begin
_rootPath := aPath;
end;
在使用 Delphi 2010 构建的可执行文件中
_Foo := GetProcAddress(FooModule,’Foo’);
_Foo(‘123456’);
进入 dll,aPath = '123'。事实上,我传递的任何字符串都会被准确地切成两半。
1.) 为什么我的字面量减半?2.) 我该如何解决?
确保 _Foo 参数是 2010 年的宽字符串
WideStrings 驻留在 Windows 堆中,不受 Delphi 内存管理器的管理。因此 WideStrings(与其他长字符串类型不同)可以在 exe 和 dll 之间毫无问题地共享。
我想你得到了错误的数据,因为 WideString 是一种托管类型,并且 dll 和可执行文件的内存管理器是不同的。如果您可以重新编译 dll,则将 aPath 类型设为 PWideChar