C 嵌入互操作型別

2021-09-06 12:57:44 字數 2275 閱讀 8217

嵌入互操作型別(embed interop types)

運用office程式設計呼叫excel 的pia時microsoft.office.interop.excel.dll時會產生如下問題:

1.提示錯誤:未能載入檔案或程式集「microsoft.office.interop.excel.dll」

2.安裝的excel pia版本和編譯時使用pia的版本不一致。

解決方案:

通過 /link 選項,可以部署包含嵌入型別資訊的應用程式。 這樣,該應用程式無需引用執行時程式集,便可以使用執行時程式集中實現嵌入型別資訊的型別。如果發布了各種版本的執行時程式集,則包含嵌入型別資訊的應用程式可以使用各種版本,而不必重新編譯。有關示例,請參見 演練:嵌入託管程式集中的型別(c# 和 visual basic)。使編譯器允許正在編譯的專案使用指定程式集中的 com 型別資訊。

當涉及 com 互操作時,使用 /link 選項尤為有用。 通過嵌入 com 型別,您的應用程式不再要求目標計算機上有主互操作程式集 (pia)。/link 選項指示編譯器:將所引用互操作程式集中的com 型別資訊嵌入生成的編譯**中。 該 com型別由 clsid (guid) 值標識。這樣,您的應用程式可以在安裝有 clsid 值相同的相同 com 型別的目標計算機上執行。自動執行 microsoft office 的應用程式就是很好的示例。由於 office 這樣的應用程式通常在不同的版本中採用相同的 clsid 值,因此只要目標計算機上安裝有 .net framework 4 或更高版本,且您應用程式使用的方法、屬性或事件包含在所引用 com 型別中,您的應用程式就可以使用引用的 com 型別。

/link 選項僅嵌入介面、結構和委託。 不支援嵌入 com 類。

若要在 visual studio 中設定 /link 選項,請新增程式集引用,並將 embed interop types 屬性設定為 true。embed interop types 屬性的預設設定為 false。

在**中建立嵌入 com 型別的例項時,必須使用適當的介面來建立該例項。如果嘗試使用 coclass 建立嵌入com 型別的例項,將導致錯誤。

——/link(c# 編譯器選項)

在引用 com 物件的應用程式中嵌入型別資訊,則可以不需要主互操作程式集 (pia)。此外,利用嵌入的型別資訊可實現應用程式的版本中立性。即,可以將程式編寫為使用多個 com 庫版本中的多個型別,而不是每個版本都需要乙個特定的 pia。對於使用 microsoft office 庫中物件的應用程式,這是一種常用方案。嵌入型別資訊後,程式的同乙個生成可以使用不同計算機上的不同 microsoft office 版本,而無需為 microsoft office 的每個版本重新部署該程式或 pia。

由於嵌入的互操作型別資訊,本演練中建立的應用程式將以不同的 microsoft office 版本執行。如果 embed interop types 屬性設定為 false,則必須為應用程式以後執行時使用的每個 microsoft office 版本包括乙個pia。

——演練:嵌入 microsoft office 程式集中的型別資訊(c#和 visual basic)

——如何:通過使用 visual c# 2010 功能訪問 office 互操作物件(c# 程式設計指南)

dynamic程式設計的知識需要進一步了解。

關於odbc資料來源和office互操作的問題解決方案:

1.odbc資料來源

accessdatabaseengine.exe是office2007 access的odbc資料庫驅動程式。

如果系統安裝的是office2003(version 11.0),一般會提供了oledb8.0(jet4.0)驅動程式支援(*.xls)讀取,此時不會支援oledb12.0格式資料(*.xlsx)的讀取,請安裝accessdatabaseengine.exe,之後將支援兩種格式。

2.系統安裝了office2007(version 12.0)會提供了oledb8.0和12.0的資料庫驅動程式,可通過windows\system32\odbcad32.exe(或者64bit os路徑windows\syswow64\odbcad32.exe)檢視。

安裝了office2010(version 14.0)會提供8.0、12.0和14.0的資料庫驅動程式。

程式編譯為x86專案,所以安裝32位的office驅動程式。

2.office互操作(microsoft.office.interop.excel.dll)

新增.net引用dll,將「嵌入式互操作」設定為true。這樣對安裝部署的機器沒有office版本限制。(原理如上)

C 嵌入互操作型別

1.嵌入互操作型別 中的嵌入就是引進 匯入的意思,類似於c 中using,c中include的作用,目的是告訴編譯器是否要把互操作型別引入。2.互操作型別 實際是指一系列com元件的程式集,是公共執行庫中庫檔案,類似於編譯好的類,介面等。3.嵌入互操作型別 設定為true,實際上就是不引入互操作集 ...

C 中嵌入互操作型別的含義

首先說一下它的含義 1.嵌入互操作型別 中的嵌入就是引進 匯入的意思,類似於c 中using,c中include的作用,目的是告訴編譯器是否要把互操作型別引入。2.互操作型別 實際是指一系列com元件的程式集,是公共執行庫中庫檔案,類似於編譯好的類,介面等。3.嵌入互操作型別 設定為true,實際上...

嵌入互操作型別是什麼鬼

from 對於兩個結構相同且共享相同識別特徵 名稱 guid 等 的 com 互操作型別,執行時能夠聰明地將其看作同乙個 net 型別。c 編譯器利用這一點的方式是在編譯時直接在您自己的程式集中重現互操作型別,因此不再要求在執行時存在該互操作程式集。由於篇幅所限,我不得不省略一些詳細資訊,但即使不了...