投稿者 魔界の仮面弁士  (社会人) 投稿日時 2013/5/12 12:22:50
追記 & 修正。

> この場合、生成されるファイル名は Interop.Excel.DLL となり、
> 使用する名前空間も変わってきます。

失礼。「Interop.Excel.DLL」ではなく、今回は「Interop.Word.DLL」ですね。


> なお、PIA がインストールされていない場合、(1)は一覧に載りません。
> (2) を選んだ場合は、代わりに IA が自動生成されることになりますが、

そもそも、「IA(Interop Assemblies)」についても説明していませんでしたね。
日本語訳では「相互運用機能アセンブリ」とも呼ばれる機能で、COM 型の定義を含むアセンブリのことです。
(PIA も IA の一種です)


Microsoft Office は COM コンポーネントの集合体です。
.NET と COM では仕組みが違うため、その中継役となるものが必要です。

この中継役となるのは、以下の仕組みです。
・.NET が COM を呼び出すための ランタイム呼び出し可能ラッパー(RCW)
・COM が .NET を呼び出すための COM 呼び出し可能ラッパー(CCW)

これにより、VB.NET のアプリから Office を操作することができ、
あるいは Office から VB.NET 製の DLL を呼び出すことができます。
今回使うのは RCW : ランタイム呼び出し可能ラッパー (Runtime Callable Wrapper) の方ですね。


.NET アプリが COM オブジェクトをアクティブにすると、ランタイムは、RCW のインスタンスを生成してその COM 型をラップします。
RCW は、COM のコクラスをラップする .NET Framework クラスの型であり、それらの型情報を持つものが相互運用機能アセンブリ(IA)です。
図中の「相互運用機能アセンブリ」が、参照設定のツリーに並んだ Microsoft.office.interop.Word のファイルに相当します。

VBから呼びだされると、ラップされた RCW を通じて COM 型への変換が行われます。



Visual Studio から COM コンポーネントを参照設定した場合、実際に参照されるのがこれら IA です。
相互運用機能アセンブリ(IA)は、参照設定時に自動生成されますが、TlbImp.exe を使って作成することもできます。

それらの IA のうち、特に、製造元から「公式」に発行された IA が、PIA(プライマリ IA) と呼ばれるアセンブリです。
Microsoft.Office.Interop.Word.dll も PIA です。
自動生成された IA とは異なり、PIA は発行者によるテストを受けた上でデジタル署名されたライブラリなので、互換性・安全性の面で優れています。
http://msdn.microsoft.com/ja-jp/library/cc375821.aspx


PIA は通常、GAC(グローバル アセンブリ キャッシュ)と呼ばれる場所で管理されています。また、システムに PIA が既にインストール済みであった場合、Visual Studio から参照設定で COM コンポーネントを指定したときに、インストール済みの PIA (またはそのコピー)が参照されます。
"Microsoft Word 14.0 Object Library" である MSWORD.OLB を参照設定した場合、PIA が導入されていれば Microsoft.Office.Interop.Word.dll が使われ、それが無い場合には、Interop.Word.DLL という IA が生成されます。