簡體   English   中英

是否有訪問 C++ 本機 COM 函數與 C# 互操作的最佳實踐?

[英]Is there a best practice for accessing C++ native COM functions to interop from C#?

是否有訪問 C++ 本機 COM 函數與 C# 互操作的最佳實踐?

例如,如果我有 100 個與核心 window 組件交互的 C++ 方法(基本上是本機庫)。

I want to basically make a wrapper for these C++ methods in C#, so all my newly hired employees can use that instead of C++, etc. The C++ code is legacy and scares me, so I want to deal with it just once. 這里的方法是否每個方法都有對應的 C# 方法? 事實上,還有其他方法可以做到這一點嗎?

我可以有某種包裝子系統嗎? 你們一般是怎么做的?

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

If your C++ methods are in a COM object, then you can use COM interop from C#. 請參閱CLR Inside Out: Introduction to COM Interop以獲得很好的介紹。

如果這些 C++ 方法更像傳統的 API 調用,那么您將需要使用 Platform Invoke(即 PInvoke)。 這需要在 C# 中為非托管(C++ 函數)創建托管原型。 平台調用教程是一個很好的起點。

就性能考慮 go 而言,通常不用擔心太多。 從 C# 調用可能比直接從 C++ 調用慢一點,這在很大程度上是由於封送數據。 除非您調用的代碼處於關鍵循環中,否則您不會注意到任何差異。

這實際上取決於那些本機函數的作用。 您必須在非托管和托管世界之間共享數據越多,該過程就變得越困難。 如果沒有有關您的特定功能的更多信息,很難說出您可能會在哪里遇到問題。

使用 COM Interop 來包裝庫。 然后您可以或多或少地將 C++ 代碼視為可以以正常方式調用的.NET本機代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM