【问题标题】:widestring compatibility problem in DelphiDelphi中的宽字符串兼容性问题
【发布时间】:2011-01-03 20:58:18
【问题描述】:

在使用 Delphi 2006 构建的 dll 中

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

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

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

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

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

【问题讨论】:

  • D2010中_Foo是如何声明的?
  • 请从您的 Delphi 编辑器中复制并粘贴 真实代码。您发布的不是有效的 Delphi 代码,因此我怀疑您在这里表达问题的准确程度。包括函数和变量声明。
  • @ Mason Wheeler - 显然不正确。我有 _Foo = 过程(aPath:字符串)。谢谢。
  • 投票结束:不再相关。

标签: delphi delphi-2010 delphi-2006 widestring


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-24
        • 2013-04-26
        相关资源
        最近更新 更多