http://d.hatena.ne.jp/frontline/20051116/p2 の続き。
というわけで、まずはアセンブリに厳密名を付けてみよう。
sn -k test.snk
でキーペアを作成し、
sn -i test.snk CspContainer
でCSPコンテナに格納、ソースのAssemblyInfo.vbに
<Assembly: System.Reflection.AssemblyKeyName("CspContainer")>
という記述を追加してビルド....NG。エラー内容は...
アセンブリを作成できません : 参照されたアセンブリ 'Interop.ApliGLMem' は 厳密な名前を持っていません。
...だめじゃん。
この先、実はApliGL以外にもVB6.0での利用を想定したライブラリをコアな部分で使うことが決まっているので、これで挫折するわけにはいかない。調べてみると、こんなページが見つかった。
http://www.microsoft.com/japan/msdn/EnterpriseServices/general/esfaq.asp#12.1
抜粋させてもらうと
サービス コンポーネントは厳密名を持たなくてはなりません。このため、COM オブジェクトのための相互運用アセンブリも厳密名を 持っている必要があります。 Visual Studio に相互運用アセンブリのための厳密名を生成させるためには、プロジェクトの [全般] プロパティの [ActiveX/COM オブジェクトのラッパー アセンブリ] または [ラッパー アセンブリ キー ファイル] に、キー ファイル へのパスを設定します。 多数のプロジェクトで使用する COM オブジェクト (COM+ Admin SDK オブジェクトなど) では、tlbimp.exe を使って相互運用 アセンブリを生成します。次の例では、\Windows\System32\Com にある COM+ Admin SDK (comadmin.dll) のための相互運用アセンブリを生成しています。 キーファイルを作成します。 sn /k comadmin.snk tlbimp で、キーファイルを使って相互運用アセンブリを作成します。 tlbimp comadmin.dll /keyfile:comadmin.snk /out:interop.comadmin.dll /namespace:comadmin
だそうな。Visual Studioのプロジェクト「全般」プロパティに何かあると書いてあるが、見あたらないのでコマンドラインの方法を試す。
tlbimp ApliGLMem65.exe /keycontainer:CspContainer /out:interop.ApliGLMem.dll
とやってみたところ、無事ファイルができた。次はこれを使って本体のビルド。