gpt4 book ai didi

c# - Delphi DLL 可以在 C# 中调用和使用吗?

转载 作者:行者123 更新时间:2023-11-30 02:25:44 26 4
gpt4 key购买 nike

我正在尝试迁移一个用 C++ Builder 构建的应用程序。由于时间限制,我们的客户希望我们导入 VCL 功能而不是寻找 .net 等价物或创建一个新功能。

我试图调用 rtl100.bpl 的 ExtractRelativePath 函数,该函数将 AnsiString 作为返回值和参数。然后我使用 IntPtr 来传递和获取字符串,但是在调用 API 时发生 AccessViolationException。

这是来自 rtl100.bpl 的函数原型(prototype)

PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BasrName, AnsiString DestName);

我就是这样调用它的。

[DllImport("rtl100.bpl", EntryPoint = "@Sysutils@ExtractRelativePath$qqrx17System@AnsiString1", CallingConvention = CallingConvention.Cdecl)]
Internal static extern IntPtr ExtractRelativePath(IntPtr BaseName, IntPtr DestName);

当然,我将使用 thr marshal 类分配和解除分配 intptrs。

问题是,delphi库真的可以用在c#中吗?它的大部分 API 使用 AnsiString,它是原生的 delphi 字符串。或者我们应该开始考虑使用 .net 函数?

谢谢

最佳答案

你有多个问题:

  1. Delphi RTL 使用其他工具链不支持的基于寄存器的调用约定。
  2. AnsiString 是 Delphi 特定的类型,不能传入和传出其他工具链。
  3. 此特定函数分配调用者必须释放的堆内存。您的 C# 代码无权这样做。

我认为您可能需要重新调整客户的期望。你正在尝试的是不可行的。

关于c# - Delphi DLL 可以在 C# 中调用和使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43798535/

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