c# - 在 c# dll 中调用 delphi5 过程

标签 c# delphi dll function-pointers

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

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

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

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

这是我的 delphi 代码:

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

有没有人遇到过此类问题,或者有一些关于它如何工作的想法?

谢谢 斯特凡

最佳答案

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

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

关于c# - 在 c# dll 中调用 delphi5 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261010/

相关文章:

c# - NHibernate 关系存在双向获取数据的问题

Delphi 7 Exe 在非 delphi 机器上不工作

c++ - 公开 .lib 文件的功能

linux - 如何在 Linux 下自动将给定的 so 加载到任何新启动的进程中?

javascript - 从 MVC View 访问 DLL 中的 SaveMethod

c# - IFormFile 作为嵌套的 ViewModel 属性

c# - 文件更改时通知?

c# - 为什么我的 ASP.NET 部署服务器不使用配置的环境名称?

delphi - 如何一次删除 TClientDataset 中的所有记录?

delphi - 未找到 .pas 文件,但 .dcu 存在,这还不够吗?