我有一个想在 Borland C++ 中使用的 C# 库。我采用的方法是使用混合模式 DLL,即使用 C++/CLI 作为 C# 库和 Borland C++ 之间的中间体。我创建了一个示例 HelloWorld 程序
C# 库:
namespace Hello
{
class HelloWorld
{
public void Display();
{
Console.WriteLine("Hello World");
}
}
}
C++/CLI:
我创建了一个空的 VC++ 项目并将 C# 库添加为对 C++/CLI 项目的引用,该项目导出一个函数。我已将项目设置更改为使用 /clr,并将应用程序类型更改为 DLL。
测试.h
__declspec(dllexport) void DisplayHello();
测试.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 的方式似乎存在一些问题,我无法确定导致崩溃的原因,我们将不胜感激。