将非托管代码从 C# 导入到 delphi

本文关键字:delphi 导入 非托管代码 | 更新日期: 2023-09-27 18:31:45

我有一个 c# 类,可以连接到运行良好的 dll。

现在我需要在德尔福中使用相同的函数。 最好的方法是什么?我不想在德尔福再次编写所有导入。有没有办法在Delphi中导入C#类或任何其他快速简便的方法。

这是我的 c# 类中的一个函数:

    /// Return Type: ABS_STATUS->ABS_LONG->int
    ///pszDsn: ABS_CHAR*
    ///phConnection: ABS_CONNECTION*
    [System.Runtime.InteropServices.DllImportAttribute("bsapi.dll", EntryPoint = "ABSOpen", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
    public static extern int ABSOpen([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string pszDsn, ref uint phConnection);

将非托管代码从 C# 导入到 delphi

在德尔福很简单:

function ABSOpen(pszDsn: PAnsiChar; var phConnection: Cardinal): Integer; 
    stdcall; external 'bsapi.dll';

毫无疑问,您将拥有比这更多的功能,但它们都应该足够简单。如果我是你,我会回到原始的C++头文件,它应该比你的p/invokes更容易翻译。

我认为没有任何好的转换工具可以将 p/invoke 转换为 Delphi 导入单元。即使对于德尔福C++头,我也不相信有好的通用工具。你可以看看JEDI项目,它有一些有用的资源,但在我看来,是时候卷起袖子了!