C + + アドインをレジストリ フリーに変換する

  1. [アプリケーション プロパティ]ダイアログ ボックスの[ビルド]タブ内の[出力]で、[COM 相互運用機能の登録]のチェック ボックスをオフにします。
  2. プロジェクト ファイルと同じフォルダ内にファイルを作成し、"CPPOEMAddIn.X.manifest"という名前を付けます。CPPOEMAddIn を自分のアドイン名に置き換えます。マニフェスト ファイルに次の行を追加します。実際のアドインに合わせて斜体のテキストを編集します。
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity name="CPPOEMAddIn" version="1.0.0.0" />
      <clrClass clsid="{89003b1d-548e-4508-a054-42ce772163b0}" 
                progid="CppOEMAddIn.CppOEMAddInAddInServer" 
                threadingModel="Both" 
                name="CppOEMAddIn.CppOEMAddInAddInServer" 
                runtimeVersion="" />
      <file name="CppOEMAddIn.dll" hashalg="SHA1" />
    
    

    assemblyIdentity 要素の名前は、次の図でハイライト表示されているようにプロジェクトの名前です。

    clsid はアドインのクラス ID であり、次の図に示すように、アドインに関連付けられている .idl ファイル内にあります。マニフェスト ファイルではかっこが必要です。

    clrClass 要素の name 属性は、2 つのパーツで構成され、ピリオドで区切られています。1 番目のパーツはプロジェクトの名前です。この例では CppOEMAddIn です。2 番目のパーツは、"CppOEMAddInAddInServer" である ApplicationAddInServer インタフェースを実装するクラスの名前です。

  3. .dll にマニフェストが正しく埋め込まれるようにプロジェクト設定を行います。最初の 2 つの設定は、リンカー設定の一部です。これらの設定と変更する値を下図でハイライト表示します。一部のケースでは、これらの設定値は既に修正されています。
    次はマニフェスト ツールの設定です。図に示すように[埋め込みマニフェスト]を[はい]に設定します。
    設定の[ビルド イベント]セクションで、アドインをレジストリに登録する、ビルド後の手順を削除します。次の図に示すように、[コマンド ライン]フィールドからテキストをクリアします。
  4. レジストリ内のアドインの登録をサポートしているプロジェクトからコードを削除します。このアクションは、プロジェクトに関連付けられている .rgs ファイルを削除し、DllRegisterServer と DllUnregisterServer 関数を削除します。
  5. プロジェクトをコンパイルします。コンパイル時にエラーが発生した場合は、入力したコマンド文字列が手順 2 の文字列と一致することを確認します。

    マニフェストが完全に埋め込まれていることを確認するには、Visual Studio にアドイン .dll をドラッグします。下図に示すように、"RT_MANIFEST" フォルダが表示されます。"2" のアイコンをダブルクリックして、実際のマニフェスト データを表示します。

  6. すべてのレジストリ フリー アドインには .addin ファイルが必要です。レジストリ ベースのアドインでは、Inventor はアドインに関する情報を取得するのに、レジストリに依存します。.addin ファイルは、これと同じ情報のためのレジストリとして機能します。アドインのファイル名は、Autodesk.AddInName .Inventor.addin の形式です。下図は、例の基本アドインの .addin ファイルの例です。変化する部分は斜体で示しています。
    <?xml version="1.0" encoding="utf-16"?>
    <Addin Type="Standard">
    	<ClassId>{2bf59d73-5170-4524-b0e1-391760aaffa5}</ClassId>
    	<ClientId>{2bf59d73-5170-4524-b0e1-391760aaffa5}</ClientId>
    	<DisplayName>MyOEMApp</DisplayName>
    	<Description>Inventor OEM Sample App</Description>
    	<Assembly>MyOEMApp\MyOEMApp.dll</Assembly>
    	<Hidden>0</Hidden>
    </Addin>
    

      アドイン ファイル例の要素について説明します。

    • ClassIdClientId: 両方とも同じ値で、StandardAddInServer クラスの最上位にある GUID です。
    • DisplayName: 任意の値を設定でき、アドイン マネージャに表示されるアドインの名前です。
    • Description: 任意の値を設定でき、アドイン マネージャに表示されるアドインの説明です。
    • Assembly: アドイン .dll の名前とパス(OEM bin フォルダに対する相対パス)です。サブフォルダの名前は、アドイン .dll と同じにする必要があります。
    • Hidden: アドイン マネージャでアドインを表示するかどうかを定義します。1 の値は、非表示にすることを示します。ただし、アドイン マネージャ内で右クリックして、[非表示のメンバを表示]を選択すると、すべてのアドインが表示されます。
    • 他のアドインで定義されている他の要素が含まれることがありますが、適用されないか、OEM 基本アドインでは無視されます。

  7. OEM¥bin フォルダにアドイン .dll と同じ名前のフォルダを作成します(名前から .dll 部分は省きます。新しいフォルダの絶対パスの例: "C:¥Program Files¥Autodesk¥Inventor OEM 2014¥Bin¥MyOEMApp")。

    新しいフォルダにアドイン .dll をコピーします。

  8. アドインの対象範囲とオペレーティング システムに応じて、次のフォルダのいずれかに、.addin ファイルをコピーします。
    • バージョンに依存しない場合
      次の場所に .addin ファイルが存在する場合、アドインはマニフェスト ファイルの "SupportedSoftwareVersionXXX" の設定値に基づいて、Inventor の複数のバージョンをロードします。
      • Windows XP C:¥Documents and Settings¥All Users¥Application Data¥Autodesk¥Inventor Addins¥
      • Windows7 C:¥ProgramData¥Autodesk¥Inventor Addins¥
    • バージョンに依存する場合
      マニフェスト ファイルを次の場所に配置すると、特定のバージョンの Inventor にアドインをロードすることを示します。マニフェスト ファイルの "SupportedSoftwareVersionXXX" 設定のすべての値は無視されます。
      • Windows XP C:¥Documents and Settings¥All Users¥Application Data¥Autodesk¥Inventor 2011¥Addins¥
      • Windows7 C:¥ProgramData¥Autodesk¥Inventor 2011¥Addins¥
    • ユーザごとにオーバーライドする場合
      ユーザ単位のオーバーライドを保存する場合は、マニフェスト ファイルは次の場所に自動的に生成されます。これらのマニフェスト ファイルの設定によって、'すべてのユーザ' フォルダにあるマニフェスト ファイルの設定値がオーバーライドされます。オーバーライド マニフェスト ファイルの名前は、"マスタ" ファイルの名前と同じになります。
      • Windows XP C:¥Documents and Settings¥<ユーザ>¥Application Data¥Autodesk¥Inventor 2011¥Addins¥
      • Windows7 C:¥Users¥<ユーザ>¥AppData¥Roaming¥Autodesk¥Inventor 2011¥Addins¥