簡體   English   中英

為什么C#PInvoke不能與非托管DirectX一起使用

[英]Why C# PInvoke can't work with unmanaged DirectX

我已經使用C#一年了,我知道你可以通過interop / PInvoke從C#訪問本機代碼。 我剛開始學習DirectX並了解到使用DirectX和c#的幾種方法之一是使用像SharpDX這樣的東西,這是一個用c ++而不是C#編寫的包裝器。 我的問題是; 因為C#支持互操作性並允許程序員訪問本機dll / com對象。 對於DirectX dll / coms,這種支持無效。 我很困惑

這是不正確的。 SharpDX是純C#包裝器,它通過.NET程序集上的IL字節碼后處理使用一些C ++ / CLI技術。 有關詳細信息,請參閱原始帖子 (在“如何避免在C#中使用C ++ / CLI”一節中)。 要在C#中實現C ++接口回調,您還可以查看這篇文章

即使沒有calli IL字節碼指令,使用非托管委托(通過Marshal.GetFunctionPointerForDelegate )開發完整的COM對象包裝也是完全可能的。 您也可以使用C#中的常規COM互操作來完成此操作

另一方面,如果C ++對象不提供COM接口(即只有純虛方法),則需要對其進行簡化的C ++包裝器訪問,或者處理C ++對象的導出修改名稱(這是afaik,而不是標准化)

PInvoke相當有限,適用於C風格的API,如Windows API。 有很少的類型,可以編組。
COM互操作存在類似的限制。

DirectX API主要是C ++。 你不能在邊界之間傳遞C ++類 - 這很令人頭痛。 但是C ++ / CLI是一種可行的方式 - 它可以幫助您在托管和本地世界之間建立某種橋梁。

暫無
暫無

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

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