C#涉及多个项目时的非托管出口(Robert Giesecke)
发布时间:2020-12-15 22:00:46 所属栏目:百科 来源:网络整理
导读:我有这种情况,我需要在.Net中创建一个可以从delphi程序调用的非托管DLL.我一直在做一些研究,我找到了Robert Giesecke的图书馆(RGiesecke.DllExport).我开始使用一个非常简单的DLL,它显示带有文本框的窗体,如下所示: [ComVisible(true)][DllExport("PlaceOrd
我有这种情况,我需要在.Net中创建一个可以从delphi程序调用的非托管DLL.我一直在做一些研究,我找到了Robert Giesecke的图书馆(RGiesecke.DllExport).我开始使用一个非常简单的DLL,它显示带有文本框的窗体,如下所示:
[ComVisible(true)] [DllExport("PlaceOrder",CallingConvention = CallingConvention.StdCall)] public static IntPtr PlaceOrder(IntPtr lnpInXml) { string inputXml = Marshal.PtrToStringAnsi(lnpInXml); StringBuilder sbOutputXml = new StringBuilder(); Form1 pti = new Form1(inputXml,sbOutputXml); pti.ShowDialog(); return Marshal.StringToHGlobalAnsi(sbOutputXml.ToString()); } 这工作正常,我设置delphi程序来调用我的DLL,它工作得很好.当我在我的解决方案中添加对另一个项目的引用并在该项目中创建对象的实例时,问题就出现了.此时,delphi程序停止显示表单,就像它找不到导出的函数但它不会抛出任何错误: using MyCommonCode; namespace UnmanagedDLLTest { [ComVisible(true)] public static class UnmanagedDLL { [ComVisible(true)] [DllExport("PlaceOrder",CallingConvention = CallingConvention.StdCall)] public static IntPtr PlaceOrder(IntPtr lnpInXml) { string inputXml = Marshal.PtrToStringAnsi(lnpInXml); StringBuilder sbOutputXml = new StringBuilder(); Form1 pti = new Form1(inputXml,sbOutputXml); pti.ShowDialog(); MyCommonCode.MyClass mc = new MyCommonCode.MyClass(); return Marshal.StringToHGlobalAnsi(sbOutputXml.ToString()); } } } 这一行: MyCommonCode.MyClass mc = new MyCommonCode.MyClass(); 是我的问题的根源,一旦我评论它一切都有效.我一直在google上寻找这样的例子,但我发现的一切与我的第一段代码类似.在这一点上我会非常感激任何想法,我开始认为这是不可能的:(. 问候. 解决方法
我有同样的问题.在我的例子中,我试图从Visual FoxPro应用程序调用C#DLL.只要方法调用外部DLL,FoxPro应用程序就会返回错误/异常.
我建议你follow this guide from another StackOverflow question.基本上: >创建一个COM可见的C#dll>使用regasm在部署机器上注册DLL (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |