我知道 C# 允许使用 PInvoke ( An Overview of Managed/Unmanaged Code Interoperability ) 与 native 代码进行互操作
我们计划开发新代码,并考虑 2 个选项:
- native 解决方案 + 调用 native 代码的互操作代码的托管 (C#) 包装器。
- 完全托管的解决方案
我想知道此互操作是否有任何记录在案的限制? (例如,某些类型无法在托管/ native 之间来回编码等)
这些限制可能会影响我们使用(或不使用)选项 #1 的决定。
最佳答案
POD。 (普通旧数据)结构通常相当容易编码。
但是,如果您想要编码包含向量等内容的复杂 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
关于c# - C# 对 native 互操作的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21381907/