C#を1年間使用していましたが、interop/PInvoke経由でC#のネイティブコードにアクセスできることがわかりました。 私はちょうどDirectXを学び始め、C#でDirectXを使用するいくつかの方法の1つは、C++ではなくC#で書かれたラッパーであるSharpDXのようなものを使うことです。 私の質問は、 C#は相互運用性をサポートし、プログラマがネイティブdll/comオブジェクトにアクセスできるようにするためです。このサポートは、DirectXのdll/comに関しては有効ではありません。私は非常に混乱していますC#PInvokeがアンマネージドDirectXで動作しない理由
3
A
答えて
3
これは正しくありません。 SharpDXは純粋なC#ラッパーで、.NETアセンブリのILバイトコードの後処理を通じてC++/CLI技術を使用しています。詳細はオリジナルのpostを参照してください。 (「C#でのC++/CLIの使用を避ける方法」の節を参照)。 C#でC++インタフェースコールバックを実装する場合は、postもご覧ください。
ILバイトコード命令がなくても、アンマネージドデリゲート(Marshal.GetFunctionPointerForDelegate
経由)を使用してCOMオブジェクトの完全なラッパーを開発することは完全に可能です。また、C#で普通のCOM interopでそれを行うこともできます。
一方、C++オブジェクトがCOMインターフェイス(つまり純粋な仮想メソッドのみ)を提供しない場合は、単純化されたC++ラッパーアクセスまたはC++オブジェクトのエクスポートマングリング名を処理する必要があります。 、アフリカ、標準化されていない)
2
PInvokeはかなり限定されており、Windows APIのようなCスタイルのAPIに適用できます。 マーシャル可能な非常に小さなタイプのセットがあります。
COM interopにも同様の制限があります。
DirectX APIは主にC++のものです。境界の間でC++クラスを渡すことはできません - それは頭痛です。しかし、C++/CLIを使うことができます。管理された世界とネイティブ世界との間に何らかの橋渡しをするのに役立ちます。
関連する問題
- 1. 明白な理由でC++ open()が動作しない
- 2. C#でkeydownが何らかの理由で動作しない
- 3. graphics.hがファイルcで動作しない理由
- 4. DirectX 11 Alpha Blendingが動作しない
- 5. Stage.closeが動作しない理由
- 6. extjsボタンハンドラが動作しない理由
- 7. setSystemCursor()が動作しない理由(libgdx)?
- 8. static ofstreamが動作しない理由
- 9. SKSpriteNode.addChild()が動作しない理由
- 10. テイクオーバーシステムが動作しない理由
- 11. Linux用のDirectX APIがない理由は何ですか?
- 12. createElementNSで処理されないと動的SVGが動作しない理由
- 13. 私の関数がC言語で正しく動作しない理由
- 14. 現在Windows 7でFirebugが動作していない理由
- 15. ソートプログラムが動作していない、わからない理由
- 16. スレッドが正しく動作しない理由ここで
- 17. jqueryでタブレットのイベントがタブレットで動作しない理由
- 18. NV12のテクスチャがDirectX 11.1で動作しない
- 19. JQueryのhtml()関数がIEで動作しない理由
- 20. LiveReloadがFirefoxで動作しない理由と解決方法
- 21. 私のアプリがXcode 8 beta(8S128d)で動作しない理由
- 22. ComboBoxで背景色が動作しない理由
- 23. CordovaWebViewClientがCordova 6で動作しない理由
- 24. maphilightライブラリがイメージマップとhandlebar.jsで動作しない理由
- 25. Card.ioがGoogle nexus 5で動作しない理由
- 26. 何らかの理由でリストビューセレクタが動作しない
- 27. Context.RewritePathメソッドがiisで動作しない理由
- 28. SpringデータでSpELサポートが動作しない理由JPA @Query?
- 29. iAdsがiPadで動作しない理由
- 30. 自分のドロップダウンリストがIE 7で動作しない理由
ありがとう、これは非常に洞察力があった。私はCLR/ILを学ぶことなくC#を学ぶと思います。ASP.Netを学んでいる人と似ていて、Webの仕組みを知っていると仮定しています。私は、SlimDXやSharpDXを除いてC#でDirectXを使う方法がないと主張している(主にゲーム開発者フォーラムで)C#プログラマーの数に驚いている –