我有一个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异常是什么.