我有一个非托管的C ++ DLL,它仅导出单个类(不是COM ...这只是一个简单的C ++类)作为其接口。我想在C#中使用此类,但被告知不能仅将其导入C#中。在我的C#应用程序中使用此类的正确方法是什么?
3 回答
开满天机
TA贡献1786条经验 获得超13个赞
假设Foo类的简单方法:
创建一个C ++ / CLI项目,称为FooWrapper。
使FooWrapper依赖于非托管dll(但是通常情况下)。
创建一个托管类ManagedFoo,其中包含单个Foo *类型的私有实例字段。
在ManagedFoo中提供公共包装功能,这些功能会转发到基础实例字段。
可选(尽管推荐):
将参数从.net习惯用法(字符串等)转换为C ++习惯用法(std :: string或char *)
捕获非托管异常并抛出托管异常
然后,使您的C#代码依赖于FooWrapper项目/ dll,并确保将非托管dll与其一起正确部署,如何完成取决于非托管dll,但通常在同一目录中就足够了。
如果函数不依赖于类的实例,则P / Invoke更为简单
不负相思意
TA贡献1777条经验 获得超10个赞
有时,提供自己的C接口会更容易。 SWIG设置非常简单。我使用托管的C ++和C ++ / CLI,它们很好。最简单的就是做一个C包装器(并且几乎所有其他语言都可以使用它,因为大多数语言都可以调用C函数)。
- 3 回答
- 0 关注
- 425 浏览
添加回答
举报
0/150
提交
取消