【问题标题】:calling a delphi5 procedure in c# dll在 c# dll 中调用 delphi5 过程
【发布时间】:2011-07-12 18:32:39
【问题描述】:

我有一个大问题。我有一个调用 c# dll 的 delphi5 应用程序。我想从我的 c# dll 中调用一个函数,该函数需要一个指向 delphi 过程的指针作为输入参数。在这个 c# 函数中,delphi 过程随后被调用。

我尝试使用 IntPtr 在 c# 端声明函数指针:

ourFunction(IntPtr fct){
   ...
   helpFct = (OurType)Marshal.GetDelegateForFunctionPointer(fct, typeof(OurType));
   ...
}

如果我从 c# 调用该函数,一切正常。但是,如果我想从 Delphi 调用它(使用 delphi 过程作为输入参数),它会崩溃而不给我任何有关错误的信息。

这是我的德尔福代码:

hBuffer : THandle;
buffer : PInteger;
...
hBuffer:=GlobalAlloc(GMEM_fixed,SizeOf(Integer));
buffer:=GlobalLock(hBuffer);
buffer := Addr(AddDelphi);
intfRef.ourFunction(buffer^);

是否有人遇到过此类问题,或者有一些想法如何工作?

谢谢 斯蒂芬

【问题讨论】:

    标签: c# delphi dll function-pointers


    【解决方案1】:

    如果是 Delphi 5,那就是 .NET 之前的版本。您最好的选择是regasm C# 程序集,并从 Delphi 5 应用程序中将其作为 COM 对象访问,以便工作。

    当然,您可能还需要检查并确保调用与 COM 兼容。

    【讨论】:

    • 您好,感谢您的快速回复。对不起,当我谈论 dll 时,我实际上是指 c# 程序集。我已经使用 COM 对象(一个返回结果的简单 Add 函数)测试了通信。它工作正常。但我的问题是函数指针的转移。
    【解决方案2】:

    我不确定它在 Delphi 5 中是否有效,但在过去,我已经使用 RemObjects Hydra 成功地将用 C# 编写的 .NET 东西集成到 Delphi 中(Hydra 也可以反过来:将 Delphi 东西集成到 .网)。

    函数指针会很困难,因为 .NET 运行时和 Delphi 运行时有很大不同。

    您可能想尝试将 Delphi 函数导出到 DLL 中,然后使用 C#/.NET 端的 P/Invoke 导入它们。然后,.NET 将从 Delphi DLL 编组到 .NET 处理方式并返回。

    最后,您可以尝试使用 JCL TJclClrHost 在 Delphi 中托管 .NET 运行时(有关该方向的更多信息,请参阅 this SO question)。

    --杰罗恩

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多