簡體   English   中英

用於多個系統的后期綁定互操作庫 c#

[英]Late Binding Interop libraries for usage on multiple systems with c#

我正在嘗試編寫一個可以加載正確的 Interop office 庫並檢索有關該應用程序的信息的應用程序。 我一直在嘗試用文字來做到這一點。

Type wordType = Type.GetTypeFromProgID("Word.Application");
dynamic word = Activator.CreateInstance(wordType);

Console.WriteLine(word.Application.ActiveWindow.Document.FullName);

我打開了一個 word 文檔,但無法訪問 window。它會引發錯誤

System.Runtime.InteropServices.COMException (0x800A1098): Dieser Befehl ist nicht verfügbar, weil kein Dokument geöf.net ist。

翻譯成no Document is availabe

但是,如果我不使用后期綁定

var word = (Microsoft.Office.Interop.Word.Application)Marshal2.GetActiveObject("Word.Application");
Console.WriteLine(word.Application.ActiveWindow.Document.FullName);

我可以閱讀文檔文件...

如果我不能使用后期綁定,我必須編譯互操作並將其與應用程序一起發布。 我的目標是它使用已安裝程序的互操作(如果已安裝)。

如何連接到正確的實例並讀取有關活動 window 的信息?

順便說一下蘋果和橘子。 在第一個示例中,您生成了一個 Word 應用程序的新實例(沒有我可能添加的任何文檔),第二個示例是對現有的 Word 應用程序使用 IROT,該應用程序無疑有一個文檔,因此是活動的。


在您的第一個場景中,您只是生成了一個 Word 的新實例,但沒有創建一個 document 與大多數Office應用程序一樣,默認情況下Word啟動時沒有文檔。

改變:

Type wordType = Type.GetTypeFromProgID("Word.Application");
dynamic word = Activator.CreateInstance(wordType);

Console.WriteLine(word.Application.ActiveWindow.Document.FullName);

...到:

var wordType = Type.GetTypeFromProgID("Word.Application");
dynamic app = Activator.CreateInstance(wordType);
dynamic doc = app.Documents.Add(); // <---- the important bit

Console.WriteLine(doc.FullName);

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM