gpt4 book ai didi

c# - 从 C# 代码调用 delphi DLL 方法

转载 作者:太空狗 更新时间:2023-10-29 22:35:08 25 4
gpt4 key购买 nike

我正在尝试从 C# ASP.NET 代码调用 Delphi 函数。该函数的声明如下所示:

function SomeFunction(const someString, SomeOtherString: string): OleVariant;

从我的 C# 代码中我得到了这段代码:

[DLLImport(MyDLL.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern object SomeFunction(string someString, string SomeOtherString);

每次我调用此方法并将其存储为对象时,我都会收到 P/Invoke 错误。我以前从未从我的 C# 中调用过非托管代码,所以我有点不知所措。

最佳答案

您不能调用 that DLL 函数,因为它使用 Delphi 特定的 string 数据类型,在非 Embarcadero 产品中没有等效数据类型。 (即使您的 C# 代码可以匹配 Delphi 字符串类型的结构,您也需要使用 DLL 的内存管理器分配内存,它几乎肯定不会导出。)

如果您有能力更改 DLL,则使参数具有 PAnsiChar 或 PWideChar 类型。 (从您的 C# 声明来看,您似乎需要 PAnsiChar。)这就是 DLL 应该一直使用的内容。

如果您无法更改 DLL,则在 Delphi 或 C++ Builder 中编写一个使用 PAnsiChar 或 PWideChar 的包装器 DLL,然后将这些参数转发给原始的 Delphi DLL。或者向 DLL 供应商大声提示并要求使用对其他语言更友好的类型的新版本。

关于c# - 从 C# 代码调用 delphi DLL 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200521/

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