繁体   English   中英

在c#dll中调用delphi5过程

[英]calling a delphi5 procedure in c# dll

我有一个大问题。 我有一个调用ac#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^);

有人遇到过这样的问题,或者有些想法可能有用吗?

谢谢Stefan

如果它是Delphi 5,那就是.NET之前的版本。 你最好的选择将是regasm的C#组件和访问它从德尔福5应用程序中的COM对象,为了工作。

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

我不确定它在Delphi 5中是否有效,但过去我使用RemObjects Hydra成功地将用C#编写的.NET内容集成到Delphi中(Hydra也可以做其他方式:在.NET中集成Delphi的东西)。

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

您可能想要尝试的是将您的Delphi函数导出到DLL中,并使用来自C#/ .NET端的P / Invoke来导入它们。 然后,.NET将从Delphi DLL转换为.NET的处理方式。

最后,您可以尝试使用JCL TJclClrHost在Delphi中托管.NET运行时(请参阅此SO问题以了解更多信息)。

--jeroen

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM