我有一个用 C++ 实现的非常大的系统,我需要与之交互。该系统有一个相当大的 API,许多 C++ DLL。这些 DLL 导出 C++ 类,而不是漂亮的 C 风格 API。我需要在一个新的 C# 项目中使用它们。
据我所知,.NET 具有三种与本地软件交互的方式:
- P/Invoke - 仅适用于 C API
- COM 对象
- C++/CLI
所以按照我的理解,我有相应的三种方法:
- 用 C 语言编写一个包装器并使用 P/Invoke 调用它。这似乎工作太多了。
- 使用 COM 编写包装器。我不知道该怎么做,除非它非常容易,否则我不愿意学习在我看来是一种垂死的技术。
- 使用 C++/CLI 编写包装器。这似乎是最少的工作,但仍然很多。
我的问题:
首先我想知道为什么.NET 不允许我简单地 “按原样”使用 C++ 类?我假设这是一个内存问题 管理。如果是我非常愿意编写终结器, 并实现 IDisposable 。据我所知,C++ 类只是 非常花哨的结构,因为 P/Invoke 支持结构和函数 以structs作为第一个参数,为什么不支持 上课?
其次,假设我真的很懒,而且很无聊,乏味, 工作,使用这些 DLL 的最佳方法是什么?一个潜在可能 直接从 C# 调用它们是最好的。如果不是那么我会 喜欢生产 wrapper 的自动工具。此外,DLL 可能 改变,可能,只是稍微但仍然,我宁愿不要被迫 手动重写包装器。
对于一个非常好的答案,特别是在第一部分,或者一个好的自动工具,我会奖励赏金......
谢谢
最佳答案
如果您愿意采取懒惰的方式,我建议您使用工具为您的 C++ 类生成 C# 包装器。当然生成这样一个包装器的工具是SWIG。
有关详细信息,请参阅我对 similar question 的旧回答
关于c# - 如何从 C# 调用 C++ API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15822788/