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