1

是否有访问 C++ 本机 COM 函数以与 C# 互操作的最佳实践?

例如,如果我有 100 个与核心窗口组件交互的 C++ 方法(基本上是本机库)。

我想基本上用 C# 为这些 C++ 方法制作一个包装器,所以我所有新雇用的员工都可以使用它而不是 C++ 等。C++ 代码是遗留的,让我害怕,所以我只想处理一次。每种方法的方法是否都有相应的 C# 方法?事实上,还有其他方法可以做到这一点吗?

我可以有某种包装子系统吗?你们一般是怎么做的?

另外,是否有任何性能考虑等?

4

2 回答 2

8

如果您的 C++ 方法位于 COM 对象中,那么您可以使用 C# 中的 COM 互操作。请参阅CLR Inside Out: Introduction to COM Interop以获得很好的介绍。

如果这些 C++ 方法更像是传统的 API 调用,那么您将需要使用 Platform Invoke(即 PInvoke)。这需要在 C# 中为非托管(C++ 函数)创建托管原型。平台调用教程是一个很好的起点。

就性能考虑而言,通常不必担心太多。从 C# 调用可能比直接从 C++ 调用要慢一些,这在很大程度上是由于封送数据。除非您调用的代码处于关键循环中,否则您不会注意到任何差异。

这实际上取决于那些本机函数的作用。您必须在非托管和托管世界之间共享数据越多,该过程就变得越困难。如果没有有关您的特定功能的更多信息,很难说出您可能会在哪里遇到问题。

于 2009-03-23T00:18:05.807 回答
1

使用 COM 互操作来包装库。然后,您可以或多或少地将 C++ 代码视为可以以正常方式调用的.NET本机代码。

于 2009-03-23T00:08:11.400 回答