gpt4 book ai didi

delphi - 如何将 Delphi 字符串传递给 Prism DLL?

转载 作者:行者123 更新时间:2023-12-03 15:08:01 25 4
gpt4 key购买 nike

我们尝试将字符串从 native Delphi 程序传递到 Delphi Prism DLL。传递整数没有问题,但 DLL 中的字符串不匹配。我们看到Robert Love's code snippet回答另一个问题,但是没有原生Delphi程序的代码。

我们如何将字符串从 Delphi 传递到 Delphi Prism DLL?

最佳答案

最好的方法是使用 WideString。

出于多种原因。

  • 它是 Unicode,并且在 D2009 之前有效
  • 它的内存由 ole32.dll 管理,因此不依赖于 Delphi 的内存管理器或 CLR GC。
  • 您不必直接处理指针

在 Oxygene 中,你可以这样写:

type
Sample = static class
private
[UnmanagedExport]
method StringTest([MarshalAs(UnmanagedType.BStr)]input : String;
[MarshalAs(UnmanagedType.BStr)]out output : String);
end;

implementation

method Sample.StringTest(input : String; out output : String);
begin
output := input + "ä ~ î 暗";
end;

“MarshalAs”告诉 CLR 如何来回编码字符串。如果没有它,字符串将作为 Ansi (PAnsiChar) 传递,这可能不是您想要做的。

这是如何从 Delphi 使用它:

procedure StringTest(const input : WideString; out output : WideString);
stdcall; external 'OxygeneLib';

var
input, output : WideString;
begin
input := 'A b c';
StringTest(input, output);
Writeln(output);
end.

此外,永远不要将未明确定义的类型用于外部接口(interface)。您不得使用 PChar 进行 DLL 导入或导出。因为如果你这样做,当你用 D7 或 D2009 编译它时,你会遇到异常(取决于原始的开发系统是什么)

关于delphi - 如何将 Delphi 字符串传递给 Prism DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com