[英]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.