2

管理された環境での directX アプリケーション (C++) の実行について簡単な質問を受けました。親ウィンドウの背景が directX (C++) の埋め込みレンダリング ウィンドウになる MDI ツール (C#) を作成しようとしています。

C++をネイティブdllに書き込む方法を読んだことがありますが、C++プロジェクトをソリューションに含めることができる方が望ましいでしょう(それが可能かどうかさえわかりません)。いずれにせよ、役立つ手順やヒントを知っている場合、またはこれが一般的に悪い考えである場合は、お知らせください。ありがとう!

4

3 に答える 3

3

これを行う最も簡単な方法は、C ++/CLIプロジェクトをソリューションに追加することです。これにより、DirectX COMインターフェイスを直接使用して、C#コードから簡単に呼び出すことができるマネージラッパーを作成できるようになります。私はこのアプローチを数回採用しましたが、これまでに試した中で、DirectXと.Netを混合する最も簡単な方法です。マネージドDirectXは以前はオプションでしたが、サポートされなくなり、とにかく完全なCOMAPIのかなり小さなサブセットでした。

于 2008-11-05T20:26:17.300 に答える
1

まず第一に、C ++部分を別のdllファイルに書き込むことは、それがC#プロジェクトと同じソリューションになり得ないことを意味するわけではありません。

ネイティブDXを使用して管理対象ウィンドウでレンダリングするには、HWNDウィンドウID(form.WindowId.ToInt32を使用)をC++D3Ddevicec'torに渡す必要があります。その後、そのデバイスを使用してレンダリングするたびに、.NETウィンドウにレンダリングされます。

これを行うには、おそらく2つの別個のプロジェクト(C ++ dllと.NETプロジェクト)が必要です。COMラッパーまたはp-invokeを使用して、HWNDをC++dllに渡します。

于 2008-11-05T20:23:08.507 に答える
1

DirectX 用の C++ コードの作成にあまり時間をかけたくない場合は、 SlimDXの使用を検討できます。Managed DirectX 1.0 は問題外であり、2.0 は決してベータ版を離れず、後でまったく異なる XNA に置き換えるためです。 XNA Game Studio をインストールする必要があります。

SlimDXはマネージド directx のオープンソース バージョンで、API と内部構造が若干異なりますが、使いやすいです。最近リリースされたバージョンは非常に安定しています。私は現在、それを使用して本番アプリケーションを作成しています。

スリムDX

マネージ DirectX

于 2008-11-06T06:07:59.060 に答える