我有一个C#库,我想在Borland C ++中使用它。我采用的方法是使用混合模式DLL,即使用C ++ / CLI作为C#库和Borland C ++之间的中间件。我创建了一个示例HelloWorld程序
namespace Hello
{
class HelloWorld
{
public void Display();
{
Console.WriteLine("Hello World");
}
}
}
我创建了一个空的VC ++项目并添加了C#库作为C ++ / CLI项目的引用,该项目导出一个函数。我已将项目设置更改为使用/ clr并将应用程序类型更改为DLL。
__declspec(dllexport) void DisplayHello();
#include "Test.h"
using namespace Hello;
__declspec(dllexport) void DisplayHello()
{
HelloWorld ^ mHello = gcnew HelloWorld();
mHello->Display();
}
我使用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的方式似乎有些问题,我无法确定导致崩溃的原因,任何帮助都将受到赞赏。
答案 0 :(得分:2)
错误代码0xe0434352是CLR异常。根据我的经验,当这些发生在启动时,它们总是在定位组件时的问题。您可以启用assembly binding log,以帮助您找出无法加载的内容。无论如何,.NET程序集应位于.exe目录中,或者在其他地方注册到GAC中。
如果加载程序集不是错误,请尝试附加Windows调试程序(windbg)并使用它的托管调试来准确查看.NET异常是什么。