Share via


關於 Microsoft Office InfoPath 主要 Interop 元件

InfoPath 應用程式是建置為元件物件模型 (COM) 應用程式,會將其外部自動化的可程式性介面公開為 COM 介面。 為了支援建立使用 Visual C# 和 Visual Basic 等 Managed 程式代碼語言的 InfoPath 解決方案,InfoPath 安裝程式中的 .NET 可程式性支援 選項會安裝三個 Interop 元件。 Interop 元件是 .NET 元件,可作為Managed和 Unmanaged 程式代碼之間的橋樑,將 COM 物件成員對應至對等的 .NET Managed 成員。

由 InfoPath 安裝之三個 Interop 組件的檔案名稱為:

  • Microsoft.Office.Interop.InfoPath.dll

  • Microsoft.Office.Interop.InfoPath.SemiTrust.dll

  • Microsoft.Office.Interop.InfoPath.Xml.dll

本主題討論透過 Microsoft.Office.Interop.InfoPath Interop 元件公開的物件模型,該元件專門用於外部自動化程式代碼。 如需 Microsoft.Office.Interop.InfoPath.SemiTrust 元件的相關信息,該元件專門用於撰寫和執行從 InfoPath 窗體範本 (.xsn) 內執行的 Managed 程式代碼,請參閱 InfoPath 2003 兼容物件模型

重要安裝資訊

InfoPath 安裝程式的預設安裝選項會在全域程式集緩存 (GAC) 中安裝 Microsoft.Office.Interop.InfoPath 元件,其內容可在直接檢視文件系統時,從 C:\Windows\Assembly 資料夾 (或 C:\Windows\assembly\GAC_MSIL 檢視) 。 此元件稱為「Microsoft Office InfoPath 主要 Interop 元件」,通常與也安裝在 GAC 中的 Microsoft.Office.Interop.InfoPath.Xml 元件搭配使用,以便從使用 Managed 程式代碼的外部應用程式將 InfoPath 應用程式自動化。 如需 Microsoft.Office.Interop.InfoPath.Xml 元件的相關信息,請 參閱關於 InfoPath XML Interop 元件

如果在 GAC 中看不到 Microsoft.Office.Interop.InfoPath 元件,您應該確認 InfoPath 已正確安裝。 根據預設,只要 .NET Framework 1.1 可轉散發套件、.NET Framework 1.1 軟體開發工具包 (SDK) ,或在執行安裝程式之前安裝更新版本的 .NET Framework,安裝程式中的 [.NET 可程式性支援] 選項就會設定為 [從我的計算機執行]。 如果您的電腦上無法使用這些 Interop 元件,您必須確認已安裝 .NET Framework 1.1 或更新版本,然後使用 控制台 中的 [程式和功能] 來變更設定,方法是設定 [Microsoft Office InfoPath] 底下的 [從我的計算機執行] 的 [.NET 可程式性支援] 選項。

如需下載 .NET Framework 1.1 可轉散發套件的相關信息,請參閱 .NET Framework 1.1 可轉散發套件。

Microsoft.Office.Interop.InfoPath 命名空間

雖然為指定工作撰寫 Managed 程式代碼的程式與使用 Visual Basic for Applications 或 JScript 之類的語言執行相同工作非常類似,但是從 Microsoft Visual Studio 中的物件瀏覽器檢視 Microsoft.Office.Interop.InfoPath 命名空間時所公開的物件模型看起來會比較複雜。 這是因為與 .NET Framework的互操作性需要 COM 伺服器公開其所有公用介面,以及 .NET Framework 本身所需的一些額外建構。 For more information on how and why the object model exposed by an interop assembly appears more complex, see the "How COM Objects are Exposed to Managed Code" section of the InfoPath 2003 Compatible Object Models topic.

使用 IntelliSense

本節中的範例假設您已建立 Microsoft.Office.Interop.InfoPath 和 Microsoft.Office.Interop.InfoPath.Xml 元件的參考。 如需如何設定參考和其他外部自動化範例的資訊,請參閱 外部自動化案例和範例

在外部自動化程式代碼中使用 Microsoft IntelliSense 語句完成之前,您必須為 Application 類別的實例建立物件變數,如下列程式代碼行所示。

Application myApp = 
    new Microsoft.Office.Interop.InfoPath.Application();
Dim myApp As Application = _
    New Microsoft.Office.Interop.InfoPath.Application()

建立物件變數之後,當您輸入變數名稱後面接著句點時,會顯示下拉式清單,其中包含要選取的 Application 類別成員

若要使用 InfoPath 窗體,請宣告 XDocument 類型的物件變數,然後從 Application 物件變數的 XDocuments 集合開啟表單來初始化它,如下列程式代碼行所示。

XDocument myXDoc = myApp.XDocuments.Open(
    "c:\\temp\\Form1.xml",
    (int) XdDocumentVersionMode.xdFailOnVersionOlder);
Dim myXDoc As XDocument = myApp.XDocuments.Open( _
    "c:\\temp\\Form1.xml", _
    XdDocumentVersionMode.xdFailOnVersionOlder)

當您輸入變數名稱,後面接著句點時,將會顯示 XDocument 類別成員的 IntelliSense 語句完成下拉式清單。

若要使用 #DB282281F657D4923A012EF370883E6C6 (MSXML) 處理表單的基礎 XML 檔內容,您必須建立 IXMLDOMDocument2 類型的變數,然後使用 XDocument 類別的 DOM 屬性,將表單的 XML 檔物件模型 (DOM) 指派給該變數。

IXMLDOMDocument2 doc= myXDoc.DOM as IXMLDOMDocument2;
Dim doc As IXMLDOMDocument2 = myXDoc.DOM

當您輸入變數名稱後接句點時,將會顯示 IXMLDOMDocument2 類別成員的IntelliSense語句完成下拉式清單,這可讓您使用MSXML來處理 XML 檔。

使用類別庫參考文件

Microsoft.Office.Interop.InfoPath 命名空間類別庫參考文件的組織會反映 Coclass 介面與它們所實作的繼承介面之間的關聯性。

當您開啟 Coclass 介面的主題 ,例如 Application 時,在主題開頭的介面描述之後,coclass 介面成員的鏈接會顯示空的主題。 若要顯示 coclass 介面實作的成員清單,必須開啟 coclass 繼承的最近介面主題,然後開啟其成員的表格。 在 coclass 介面主題中的「註解」小節開頭提供了繼承介面的連結。

當您在 Visual Studio Code 編輯器 中按 F1 時,行為很類似,不同之處在於您叫用 F1 說明的成員會直接顯示,因為您最常使用介面的成員。 不過,當您第一次遇到成員時,可以從已建立版本的介面實作成員,可能會造成混淆。 例如,如果您輸入 myXDocument.UI.Alert 游標並放置游標, Alert 然後按 F1,則為標題為 “UI2” 的主題。[警示方法] 隨即顯示。 這是因為 Alert 方法是 UI2 介面成員的實作。

傳遞選用參數給 InfoPath 物件模型成員

如果 InfoPath 物件模型成員包含選擇性參數,而且您未指定該參數的值,則必須傳遞該參數的 Type.Missing 字段。 如果省略實際值,卻無法傳遞 Type.Missing 欄位,將會導致建置錯誤。 這適用於以 C# 和 Visual Basic 撰寫的程式代碼。 例如,ViewObject 介面的 SelectNodes 方法包含兩個選擇性參數:varEndNodevarViewContext。 未指定這些選擇性參數之實際值的程式代碼行應該如下列範例所示。

myXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing);
myXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing)

另請參閱