c# – 与Borland C的.Net互操作性问题

我有一个C#库,我想在Borland C中使用它.我采用的方法是使用混合模式DLL,即使用C/C++LI作为C#库和Borland C之间的中间件.我创建了一个示例HelloWorld程序

C#库:

namespace Hello
{
   class HelloWorld
   {
      public void Display();
      {
        Console.WriteLine("Hello World");
      }
   }
}

C/C++LI:

我创建了一个空的VC项目,并添加了C#库作为对C/C++LI项目的引用,该项目导出了一个函数.我已将项目设置更改为使用/ clr并将应用程序类型更改为DLL.

Test.h

__declspec(dllexport) void DisplayHello();

TEST.CPP

#include "Test.h"
using namespace Hello;

__declspec(dllexport) void DisplayHello()
{
   HelloWorld ^ mHello = gcnew HelloWorld();
   mHello->Display();
}

Borland C:

我使用Visual Studio生成的DLL并使用Borland提供的IMPLIB实用程序生成Borland C编译器可以理解的LIB文件.

我使用生成的lib文件和头文件Test.h来构建BCB项目,我有一个调用DisplayHello的函数

void CallDisplay()
{
   DisplayHello();//Application crashes here.
}

我注意到的奇怪之处在于当我移除时

HelloWorld ^ mHello = gcnew HelloWorld();
mHello->Display();

该程序工作正常.

它会抛出一个EExternal Exception“e0434352”.我使用HelloWorld的方式似乎有些问题,我无法确定导致崩溃的原因,任何帮助都将不胜感激.

最佳答案 错误代码0xe0434352是CLR异常.根据我的经验,当这些发生在启动时,它们总是在定位组件时的问题.您可以启用
assembly binding log,以帮助您找出无法加载的内容.无论如何,.NET程序集应位于.exe目录中,或者在其他地方在GAC中注册.

如果加载程序集不是错误,那么尝试附加Windows调试器(windbg)并使用它的托管调试来准确查看.NET异常是什么.

点赞