与Borland C ++的.Net互操作性问题

时间:2012-10-09 06:33:42

标签: c# interop c++-cli c++builder

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

C#Library:

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

C ++ / CLI:

我创建了一个空的VC ++项目并添加了C#库作为C ++ / CLI项目的引用,该项目导出一个函数。我已将项目设置更改为使用/ 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异常“e0434352”。我使用HelloWorld的方式似乎有些问题,我无法确定导致崩溃的原因,任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

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

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