Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
谢谢
编辑这个库是开源的.. 所以如果我的要求需要 C++ 代码中的特殊内容,我将能够做到......
有两种方法,都使用适配器(将 C++ 类映射到 .NET 类):
前者避免通过 COM,并且大部分 C++ 代码可能只需使用正确的开关编译即可。
附加:理论上 P/Invoke 可能是可能的,但所有 C++ 语义都会丢失,您需要手动处理 C++ 对象生命周期(以及实例引用IntPtr)。另外,当然,您需要调用损坏的名称...
IntPtr
另一种选择是在 C++/CLI 中编写托管包装器。我更喜欢这样而不是使用 P/Invoke。
您不能在托管代码中直接使用 C++ 类。主要问题是无法使用与 C++ 代码相同的内存分配器,并且无法轻松调用构造函数和析构函数。一位微软员工发布了一篇博文,表明这并非不可能。我不建议这样做。
COM 是一种解决方案,但它总是需要相当大的重写和良好的 COM 编程技能。C++/CLI 语言中的托管类包装器通常是最好的解决方案。您可以看一下SWIG 工具,以考虑自动生成这些包装器类。但是请注意,此工具很容易产生比它解决的问题更多的问题。