【发布时间】:2012-10-09 06:33:41
【问题描述】:
我有一个 C# 库,我想在 Borland 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();
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 的方式似乎存在一些问题,我无法确定导致崩溃的原因,我们将不胜感激。
【问题讨论】:
标签: c# interop c++-cli c++builder