當用.NET調用已有的COM組件的時候,一般需要使用tlbimp導入COM組件的TypeLibrary信息,生成對應的Interop Assembly。所謂PIA (Primary Interop Assembly),則是“官方”發布的對于某個COM組件的.NET DLL。比如微軟公司發布了Office 2003的COM組件,可以用于操作COM,同時,微軟也發布了Office 2003所對應的PIA,用于.NET。PIA和普通的Interop(又稱為AIA, Alternative Interop Assembly)的不同之處在于:
1. PIA是官方發布并經過Sign,可以在不同程序中共享。而AIA如果被不同的公司Sign過,則一個公司Sign的AIA DLL所創建的對象和另外一個公司Sign的AIA DLL是不兼容的(不同的Key代表不同的Identity),這也是使用PIA的主要原因
2. PIA可能經過某種改動使其比一般Tlbimp生成的Interop DLL要容易使用一些,比如提供一些封裝函數。修改方法通常有兩種:
a. 可以從Tlbimp生成的DLL反匯編修改再生成新的DLL
b. 可以自己用C#來編寫這個DLL(其實Tlbimp和Tlbexp也是C#寫的)
3. 用Tlbimp生成PIA的時候需要指定/primary開關并聲明對應的key,如果不使用tlbimp生成PIA,則需要將對應的DLL加上PrimaryInteropAttribute和GuidAttribute,這也正是Tlbimp所作的。
4. 用RegAsm注冊PIA的時候,RegAsm會在COM組件的TypeLibrary注冊項中加入注冊信息表明該PIA對應這個COM組件
5. 當用Visual Studio的Add Reference功能的時候,VS會自動去查找是否有符合條件的PIA(通過上面所說的注冊信息),如果存在,則直接使用這個DLL以上是官方解釋得PIA,說白了就是微軟提供的用于使用其產品特性的一些公共數據定義和方接口,這些特性中就包括VBA模塊,當然還有其他的特性,對于ACCESS有數據查詢,排序,等等,這里講的僅僅是應用其中VBA模塊特性的方法。首先需要導入Microsoft.Office.Interop.Access程序集主程序代碼如下:
posted on 2009-02-10 14:01 pear_li 閱讀(2079) 評論(0) 編輯 收藏 引用 所屬分類: C#/.net