我知道C#允许使用PInvoke(An Overview of Managed/Unmanaged Code Interoperability)与本机代码进行互操作
我们正计划开发新代码,并正在考虑两个选项:
我想知道这个互操作是否有任何记录的限制? (例如 - 某些类型无法在托管/本机之间来回编组等)
这些限制可能会影响我们决定使用(或不使用)选项#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