PIA (Primary Interop Assembly) & AIA (Alternate Interop Assembly)簡介

ATField發表於2007-04-12

當用.NET呼叫已有的COM元件的時候,一般需要使用tlbimp匯入COM元件的TypeLibrary資訊,生成對應的Interop Assembly。所謂PIA (Primary Interop Assembly),則是“官方”釋出的對於某個COM元件的.NET DLL。比如微軟公司釋出了Office 2003COM元件,可以用於操作COM,同時,微軟也釋出了Office 2003所對應的PIA,用於.NETPIA和普通的Interop(又稱為AIA, Alternative Interop Assembly)的不同之處在於:

1.     PIA是官方釋出並經過Sign,可以在不同程式中共享。而AIA如果被不同的公司Sign過,則一個公司SignAIA DLL所建立的物件和另外一個公司SignAIA DLL是不相容的(不同的Key代表不同的Identity),這也是使用PIA的主要原因

2.     PIA可能經過某種改動使其比一般Tlbimp生成的Interop DLL要容易使用一些,比如提供一些封裝函式。修改方法通常有兩種:

a.     可以從Tlbimp生成的DLL反彙編修改再生成新的DLL

b.     可以自己用C#來編寫這個DLL(其實TlbimpTlbexp也是C#寫的)

3.     Tlbimp生成PIA的時候需要指定/primary開關並宣告對應的key,如果不使用tlbimp生成PIA,則需要將對應的DLL加上PrimaryInteropAttributeGuidAttribute,這也正是Tlbimp所作的。

4.     RegAsm註冊PIA的時候,RegAsm會在COM元件的TypeLibrary註冊項中加入註冊資訊表明該PIA對應這個COM元件

5.     當用Visual StudioAdd Reference功能的時候,VS會自動去查詢是否有符合條件的PIA(通過上面所說的註冊資訊),如果存在,則直接使用這個DLL

 

作者:      ATField
Blog:     
http://blog.csdn.net/atfield
轉載請註明出處

相關文章