簡體   English   中英

無法將“C:\Windows\System32\shdocvw.dll”添加到我的項目中

[英]Cannot add “C:\Windows\System32\shdocvw.dll” to my project

我使用 VS 2010 Ultimate。

我正在嘗試通過右鍵單擊References -> Add Reference...將“shdocvw.dll”添加到我的項目引用中,然后單擊瀏覽並導航到“C:\Windows\System32\shdocvw.dll”,但是當我單擊添加按鈕根本沒有任何反應。 對話框甚至沒有關閉。

知道我做錯了什么嗎?

我嘗試重新啟動VS,但一直遇到這個問題。

在您的 C# 解決方案中,如果您添加對名為“Microsoft Internet Controls”的 COM 組件的引用,您應該能夠從 C# 控制台應用程序訪問 SHDocVw 命名空間,而無需執行任何異常操作。

一旦我這樣做了(在 VS 2008 中),我就可以使用 SHDocVw.ShellWindows、SHDocVw.IWebBrowser2 等等。 例如:

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();

foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
{
    Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
    if (ie.LocationURL.Contains("foo.com"))
        ie.Quit();
}

編輯:使用 VS 2012/.NET 4.x 時,您可以改用以下方法來解決錯誤“無法嵌入互操作類型 'SHDocVw.ShellWindowsClass'”。

using SHDocVw;
// ... snip ...
            SHDocVw.ShellWindows shellWindows = new ShellWindows();
            foreach (SHDocVw.IWebBrowser2 ie in shellWindows)
            {
                Console.WriteLine("ie.LocationURL: " + ie.LocationURL);
                if (ie.LocationURL.Contains("foo.com"))
                    ie.Quit();

有關 VS 2012 問題的更多信息,請參閱此答案:

C# 如何從 IE 中獲取當前的 URL?

問題是shdocvw.dll不是 .NET 程序集,它既是普通的 Win32 DLL 控件,又是 ActiveX 控件,但不是程序集。 您可以添加作為對 C# 項目的引用的唯一內容是 .NET 程序集。

好的,這引出了一個問題,為什么要在 C# 項目中添加對shdocvw.dll的引用? 可能是因為您想使用 Internet Explorer 的 ActiveX 界面在您的應用程序中包含一個 Web 瀏覽器。

If, so, then if you are writing a Windows Forms application, you should use the WinForms WebBrowser control, and if you are writing a WPF application you should use the WPF WebBrowser control. 以下是 Windows Forms 的說明:

但是,如果出於某種原因您想自己包含控件,而不是使用“罐裝”版本,那么您需要將其添加到 Visual Studio Toolbox,如下所述:

不幸的是,這是我以前見過的常見請求。

您不能將其添加為參考。 您需要將其添加為工具箱項目,將其放入表單中,然后 bob 是您的叔叔...

真是個特例!

此處的完整說明: http://www.codeproject.com/KB/miscctrl/WebBrowserEx.aspx

暫無
暫無

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

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