C#对本机互操作的限制

时间:2014-01-27 13:15:09

标签: c# .net interop pinvoke native

我知道C#允许使用PInvoke(An Overview of Managed/Unmanaged Code Interoperability)与本机代码进行互操作

我们正计划开发新代码,并正在考虑两个选项:

  1. 本机解决方案+托管(C#)包装调用本机代码的互操作代码。
  2. 完全托管的解决方案
  3. 我想知道这个互操作是否有任何记录的限制? (例如 - 某些类型无法在托管/本机之间来回编组等)

    这些限制可能会影响我们决定使用(或不使用)选项#1。

1 个答案:

答案 0 :(得分:5)

P.O.D。 (普通旧数据)结构通常很容易编组。

但是如果你想编组包含向量等内容的复杂C ++类,那么你就会遇到麻烦。

如果您可以编写C / C ++代码将复杂类转换为更简单的类型,以便通过p / invoke进行调用,那就没关系 - 但是,除了复杂的C ++类之外,还要远离它。

然而,还有另一种可能性。

您可以使用所谓的“It just works”技术使用 CLI C ++类包装C ++代码。您可以在C ++中混合使用非托管代码和CLI代码 - 即使在同一个文件中 - 这确实可以提供帮助。

请点击此处了解更多详情:

http://msdn.microsoft.com/en-us/library/ms173185.aspx

http://www.windowsdevcenter.com/pub/a/dotnet/2003/03/03/mcppp2.html(这是相当古老的)

http://www.codeproject.com/Articles/651516/Exposing-native-to-managed-Cplusplus-CLI-vs-P-Invo