D3DImage チュートリアル ② 混合アセンブリへの変換

DirectX Sample Browserからインストールしたアンマネージ プロジェクトにC++/CLIを使ってラッパーを追加して、ネイティブ アセンブリを混合アセンブリに変換します。

プロパティ設定

前回作成したD3DImageTutorial.slnを開き、[ソリューション エクスプローラー]から[D3DRenderer]プロジェクトを右クリックし[プロパティ]を選択します。

プロパティ ページ ダイアログが開くので、プラットフォームが[アクティブ(Win32)]となっていることを確認してから、左上の[構成]を[すべての構成]にして、[構成の種類]を[ダイナミック ライブラリ(.dll)]に、[共通言語ランタイム サポート]を[共通言語ランタイム サポート(/clr)]に変更します。

image

次に、プロパティ ページの[構成プロパティ]→[C/C++]を開き、[コード生成]を選びます。[ランタイム ライブラリ]を[マルチスレッド デバッグ DLL(/MDd)]に変更します。

image

次に、[構成プロパティ]→[リンカ]→[全般]を選び、[出力ファイル]を<親またはプロジェクトの既定値から継承>に変更して、[適用]をクリックします。ソリューション エクスプローラーのD3DRendererを右クリックして、[プロジェクトのみ]→[D3DRendererのみリビルド]を選んでリビルドしてください。出力フォルダにD3DRenderer.dllが出力されているはずです。このときD3DRenderer.exeが残っているときは、そのフォルダのファイルをすべて削除して、再度ビルドしてください。

image

最後に、マニフェスト設定を変更します。[構成プロパティ]→[リンカ]→[マニフェスト ファイル]を開き、[マニフェストの生成]を[はい]に変更します。[構成プロパティ]→[マニフェスト ツール]で[入力と出力]を選び、[埋め込みマニフェスト]を[はい]に変更し、[適用]をクリックします。

image

image

 

D3DRendererプロジェクトに2つの新しい項目、D3DRenderer.hとD3DWrapper.cppを追加します。D3DRendererプロジェクトを右クリックして[追加]→[新しい項目]を選び、カテゴリで[コード]を選び、それぞれ[C++ファイル(.cpp)]と[ヘッダーファイル(.h)]を選んで追加してください。D3DRendererプロジェクトにあるdirectx.ico,  D3DRenderer.rc, resource.hを右クリックして、[プロジェクトから除外]を選んでください。D3DRendererプロジェクトにはD3DWrapper.cppとD3DRenderer.cppとD3DRenderer.hとD3DRenderer.manifestの4つが残ります。

D3DRenderer.manifest

最後に、C++/CLIが使えるように、マニフェストファイルD3DRenderer.manifestの内容を以下のように変更します。

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1'
manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
         level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32'
name='Microsoft.VC90.DebugCRT'
version='9.0.21022.8'
processorArchitecture='x86'
ublicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
 </dependency>
</assembly>

つづく