让我们说我正在访问第三方库,其文档声明我可以使用pInvoke或创建互操作库并使用COM.这两种技术有什么区别,为什么我可以选择其中一种?
Dea*_*ing 13
P/Invoke用于调用plain-C API(与大多数Win32 API一样).COM interop用于调用COM对象.
您可以围绕C API创建一个C++ COM包装器,然后使用COM interop来调用您的包装器,如果API调用的数量相对较高(并且您可以使用COM包装器将它们封装到一个或两个调用中).这是因为托管本机互操作可能相对昂贵,并且最小化转换次数是有益的.虽然实际上我会说使用C++/CLI来创建包装器可能对C#方面更友好一些(例如,看看SlimDX,它是围绕COM API(DirectX)的C++/CLI包装器).
话虽如此,除非你有一个特定的性能问题,否则我只想使用你想要调用的API更自然的方法:如果它是一个C API(如Win32 API那样),那么使用P/Invoke.如果它是基于COM的,那么使用COM互操作.