c#对非托管c++的包装
C# Wrapper Around Unmanaged C++
我看到这里也有关于用c#包装非托管c++的类似问题,但它们似乎都是关于具体的实现问题。我想知道使用c#和非托管c++时的一般方法是什么。
例如,我有相当多的类写在非托管c++,我希望能够通过。net使用(理想情况下与Excel中的VBA)。到目前为止,我一直在使用托管c++/CLI来做到这一点,但是我注意到该语言的一些奇怪之处,我宁愿避免。再往下读,似乎我可以把我的非托管c++包装在c#中,然后直接访问。net(同时完全避免托管c++/CLI)。这可能吗?如果可能,最好的方法是什么?谢谢你的帮助。
你有三个选择:
- 使用c++/CLI包装。如果您的目标是。net,这是理想的解决方案。您可以访问。net世界的所有内容。你可以用它包装你的c++库,然后在c#/其他地方使用它。抛弃。net,制作一个COM包装器,可能需要ATL的帮助。这有点困难,但你可以更容易地从VBA/Excel调用你的代码。如果你愿意,你仍然可以从。net调用你的COM类。
- 将代码编译为本机DLL并使用c#中的P/Invoke。请注意,这个解决方案充其量是乏味的,因为没有什么是自动的。
如果你的目标是真正的Excel/VBA,因为你要做COM对象无论如何,我会选择选项2,直接使用ATL做COM类。虽然这完全绕过了。net,但是使用。net来连接c++代码和Excel对我来说一直是个麻烦。
如果你想完全避免c++/CLI而使用纯c#来访问你的本地代码,那么它将不得不通过直接p/Invoke,逐个方法。如果您有大量的非托管代码,这几乎肯定不是理想的。
就我个人而言,我认为"最好"的解决方案是继续使用c++/CLI编写托管包装器,围绕您的本机代码,暴露最简单的公共接口,以减少复杂性。
相关文章:
- 如何在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 地图并访问括号运算符(运算符 [])?
- 使用运算符*重载包装矩阵乘法