如何用C++/CLI包装C++类
How to wrap a C++ class with C++/CLI
因此,我正试图使用C++/CLI了解C++和C#之间的互操作性,为非托管C++类创建一个C++/CLI包装器,这是必要的,因为我需要在C#应用程序中使用我的C++类的多个实例。
我制作了一个CLR类库,它使用pimpl来隐藏像这样的非托管类
http://msdn.microsoft.com/en-us/library/ms235281.aspx
我原以为构建这个项目会产生一个.lib文件,但发布文件夹中输出的只是一个DLL。我有点困惑,因为我被引导相信你不能在C++/CLI中导出一个类,我只会链接到我的CLR类库项目输出的.lib文件。我只能假设我创建了错误的项目,但似乎没有太多关于这类事情的文档。
谢谢。
我过去所做的与MSDN文章非常相似
创建一个C++类,并确保该cpp文件的编译器选项设置为"无公共语言运行时支持"
然后使用pimpl在C++/CLI类中引用此C++类,确保此cpp文件已启用"公共语言运行时支持(/clr)"。
输出将是一个可以在现有.NET代码中使用的DLL。
根据经验,我会确保您在包装类中创建的接口只有doubles、int等,并且不引用任何C++类。
@比尔在一些C#代码中使用这个包装DLL,只需使用"添加引用"添加对DLL的引用。您将能够按照预期调用所有公共函数。
输出的是一个.Net程序集,其中包含一些本机代码。如果你想把你的本地代码放进一个静态库,然后把它链接到这个程序集中,那么这也可以。
但最终,如果你想将代码包含在.Net(c#)应用程序中,那么它的.Net接口必须位于程序集(.dll)中。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 创建包装升压适配器的自定义范围类
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 使用运算符*重载包装矩阵乘法