1. 程式人生 > >單機情況下,IE瀏覽器訪問activeX控制元件出現紅叉問題的解決

單機情況下,IE瀏覽器訪問activeX控制元件出現紅叉問題的解決

本人也是剛接觸activeX控制元件,自己通過vs2010編寫了幾個簡單的例子,經測試工具測試過都可以用,在html檔案新增之後如果雙擊檔案用IE開啟,會有載入控制元件之類的提示,但是在瀏覽器中輸入url地址訪問時,在頁面中會出現一個紅叉,修改IE的設定也沒用。本文要解決的就是瀏覽器中出現紅叉的問題。

步驟如下:

(1)在Ctrl.h檔案中新增標頭檔案

#include "objsafe.h"
#include "comcat.h"

(2)在Ctrl.h檔案中新增以下3個方法的宣告(注意:宣告的位置是在類的外面,就這(1)中新增的兩個標頭檔案的下方就行)

HRESULT CreateComponentCategory(CATID catid, WCHAR *catDescription);

HRESULT RegisterCLSIDInCategory(REFCLSID clsid,CATID catid);

HRESULT UnRegisterCLSIDInCategory( REFCLSID clsid,CATID catid );

(3)在Ctrl.cpp檔案中新增與(2)中對應3個方法

HRESULT CreateComponentCategory(CATID catid, WCHAR *catDescription)
{
ICatRegister *pcr = NULL;
HRESULT hr = S_OK;


hr = CoCreateInstance( CLSID_StdComponentCategoriesMgr,
                   NULL,
   CLSCTX_INPROC_SERVER,
   IID_ICatRegister,
   (void**)&pcr);
if(FAILED(hr))
return FALSE;

CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409;

int len = wcslen(catDescription);
if(len>127)
len = 127;
wcsncpy(catinfo.szDescription,catDescription,len);
catinfo.szDescription[len] = '\0';

hr = pcr->RegisterCategories(1, &catinfo);
pcr->Release();

return hr;
}


HRESULT RegisterCLSIDInCategory(REFCLSID clsid,CATID catid)
{
ICatRegister *pcr = NULL;
HRESULT hr = S_OK;


hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                  NULL,
  CLSCTX_INPROC_SERVER,
  IID_ICatRegister,
  (void**)&pcr);
if(SUCCEEDED(hr))
{
CATID rgcatid[1];
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid,1,rgcatid);
}

if( pcr != NULL )
pcr->Release();

return hr;
}


HRESULT UnRegisterCLSIDInCategory( REFCLSID clsid,CATID catid )
{
ICatRegister *pcr = NULL;
HRESULT hr = S_OK;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                  NULL,
  CLSCTX_INPROC_SERVER,
  IID_ICatRegister,
  (void**)&pcr);
if(SUCCEEDED(hr))
{
CATID rgcatid[1];
rgcatid[0] = catid;
hr = pcr->UnRegisterClassImplCategories(clsid,1,rgcatid);
}

if(pcr != NULL)
pcr->Release();

return hr;
}

(4)在Ctrl.cpp檔案中替換一部分程式碼

找到如下類似的程式碼,然後註釋掉

if(bRegister)

    return AfxOleRegisterControlClass(
                            AfxGetInstanceHandle(),
                            m_clsid,
                            m_lpszProgID,
                            IDS_ICCARD,
                            IDB_ICCARD,
                            afxRegApartmentThreading,
                             _dwIcCardOleMisc,
                            _tlid,
                            _wVerMajor,
                            _wVerMinor);
}
else

  return  AfxOleUnregisterClass(m_clsid,m_lpszProgID);

把上述程式碼替換成:

if(bRegister)
{
HRESULT hr = S_OK;


hr = CreateComponentCategory(CATID_SafeForScripting,L"Controls that are safely scriptable");
        if(FAILED(hr))
return FALSE;


hr = RegisterCLSIDInCategory(m_clsid,CATID_SafeForScripting);
        if(FAILED(hr))
return FALSE;


hr = CreateComponentCategory(CATID_SafeForInitializing,L"Controls safely initizable from persisitent data");
if(FAILED(hr))
return FALSE;


hr = RegisterCLSIDInCategory(m_clsid,CATID_SafeForInitializing);
if(FAILED(hr))
return FALSE;

return AfxOleRegisterControlClass(
                            AfxGetInstanceHandle(),
                            m_clsid,
                            m_lpszProgID,
                            IDS_ICCARD, // 需要修改的位置
                            IDB_ICCARD, //需要修改的位置
                            afxRegApartmentThreading,
                             _dwIcCardOleMisc, //需要修改的位置
                            _tlid,
                            _wVerMajor,
                            _wVerMinor);
}
else
{
HRESULT hr = S_OK;
        
hr = UnRegisterCLSIDInCategory(m_clsid,CATID_SafeForScripting);
if(FAILED(hr))
   return FALSE;

hr = UnRegisterCLSIDInCategory(m_clsid,CATID_SafeForInitializing);
if(FAILED(hr))
return FALSE;

return AfxOleUnregisterClass(m_clsid,m_lpszProgID);
}

(5)最後一步,把(4)中3個“需要修改的位置”地方修改成對應自己專案中的名稱,然後生成控制元件,重新註冊就行了。

總結:我用IIS伺服器在我自己機子上測試的完全正常,但是在區域網內用別人機子訪問了一下,控制元件位置還是顯示紅叉,還不知道怎麼解決,希望大家有誰知道的可以告訴一下!

相關推薦

單機情況IE瀏覽器訪問activeX控制元件出現問題的解決

本人也是剛接觸activeX控制元件,自己通過vs2010編寫了幾個簡單的例子,經測試工具測試過都可以用,在html檔案新增之後如果雙擊檔案用IE開啟,會有載入控制元件之類的提示,但是在瀏覽器中輸入url地址訪問時,在頁面中會出現一個紅叉,修改IE的設定也沒用。本文要解決的

IE瀏覽器呼叫OCX控制元件的一般方法

(一)     先用regsvr32  檔案路徑\xxx.ocx 命令註冊,如果註冊成功,會提示註冊成功。     需要解除安裝用regsvr32  /u  檔案路徑\xxx.ocx  命令 (二)     到登錄檔查詢OCX的CLSID     regedit 開啟

VS2008 在IE中 除錯 ActiveX控制元件

不知道是不是微軟的粗心大意,VS2008中竟然沒有ActiveX控制元件測試容器。 幸好需要在IE中測試控制元件,就不需要那個測試容器啦。 1. 生產測試控制元件的HTML: <HTML><HEAD><TITLE>Test</TIT

WPF自定義控制元件中使用了RadioButton後多次使用該控制元件出現的死迴圈解決方法

最近在專案中需要用到RadioButton,所以在自定義控制元件中使用了一組RadioButton,使用一個預設的groupname,也就是這個goupname給後來的問題埋下了地雷。 定義大致如下: <Grid> <Label Height ="50" W

QTP錄製後彈出框一個或多個ActiveX控制元件無法顯示的解決方法

  錄製一段指令碼程式碼,在專家檢視視窗中編輯錄制的指令碼程式碼時,會碰到彈出一個對話視窗,提示為“當前安全設定禁止執行該頁中的ActiveX 控制元件,因此,該頁可能無法正常顯示”類似的東西,而在人工操作時卻沒有這樣的現象。(如圖)        問題主要出在於QTP設定本身,之所以在編輯錄制好的指

IE已限制此網頁執行可以訪問計算機的指令碼或ActiveX控制元件如何去除這個

     在頁面頭部加上       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.

解決多多IP情況SSL無法正常訪問

    配置: windows2003 + IIS6.0 + Verisign SSL證書     伺服器使用雙網絡卡多IP,一電信、一網通、一國際,在匯入SSL證書後,電信IP能正常通過https訪問,其他IP則不能。任意保留一IP,可以正常訪問。兩個或三個同時加上後,只

GridViewIE瀏覽器去掉行右邊豎的黑線

alt pan blog nes lis nat img clas src GridView在IE瀏覽器下有黑線。 加上如下屬性 <asp:GridView ID="GridView1" runat="server" CssClass="table-list

iOS 手機沒有安裝支付寶的情況不調支付寶網頁的解決的方法

sar inf order 手機 tin popu 全部 shared bject NSArray *array = [[UIApplication sharedApplication] windows]; UIWindow* win=[array objectAt

公司流程不規範的情況如何做好測試工作?(轉http://www.51testing.com/html/11/15160311-3719792.html)

www html 相關 負責人 ron 測試 testin pac div 這對我們來說是個機遇! 首先我要說,公司目前制度不規範,對我們來說是個機遇,絕對是個機遇!遇到這個好機會你還在等什麽?如果說這個公司已經足夠好了,那他還請你過來做什麽?你的能力還足以讓公司有更高的

GPS信號不足情況如何用GPRS模塊根據基站進行定位

www. 一個 strong cati 回車 第一個 cat 詳細 進行 AT+CREG=2 //設置參數,2為返回詳細信息,包含基站的地區區域碼和基站碼 註意:GPRS命令後面都要有回車 AT+CREG?下面為返回

python3 在文件確實存在的情況運行提示找不到文件

python head file python3 path tor 替換 找不到文件 成功 提示 [Errno 2] No such file or directory: 但是路徑下確實存在此文件,在不改動的情況下,再次運行,執行成功。 百思不得其解,看到此鏈接下的回答 h

在本地沒有安裝Oracle的情況使用plsql遠程連接數據庫

打開 語言 遠程連接 mil .com 安裝步驟 net zhs16gbk too 遠程連接數據庫的方式不止一種。這裏主要寫在本地沒有安裝Oracle的情況下,使用plsql可視化工具遠程連接數據庫的方式。 一、前提   首先你本地得安裝有plsql工具。具體的安裝步驟就不

【錯誤】混合模式程序集是針對“v2.0.50727”版的運行時生成的在沒有配置其他信息的情況無法在 4.0 運行時中加載該程序集。

csharp 技術分享 image framework src sharp ted 程序集 方案 解決方案,在app.config中添加一個配置節:startup <?xml version="1.0" encoding="utf-8" ?> <

vuejs在不使用history的情況回退返回到之前滾動的位置

切換 鉤子函數 activated 方式 原型圖 upd router html org   在vuejs裏,當切換到新路由時,想要頁面滾到頂部,或者是保持原先的滾動位置,就像重新加載頁面那樣(借用vuejs官方文檔一句話);但是官方文檔使用路由,來控制滾動行為是建立在HT

V-3-3 在沒有VCenter的情況復制虛擬機

vmware在有VCenter的情況下,可以創建一個模板虛擬機後,右鍵直接克隆一臺虛擬機。或者將虛擬機轉換為模板後,以模板創建虛擬機。如果沒有VCenter而現在要創建多臺相同的虛擬機的時候可以使用模板來創建虛擬機。這裏說到一個情況是在既沒有VCenter和模板的情況下,如何快速復制多臺相同的虛擬機。這裏參考

繼承和組合混搭的情況構造和析構函數的調用順序

組合 log class urn std 調用父類 parent clas 父類 繼承和組合混搭的情況下: 構造時,先調用父類的構造函數(如果父類還有父類,先執行父類的父類的構造函數,在執行父類的構造函數),再調用組合對象的構造函數,最後調用自己的構造函數;

C# 不安裝Oracle客戶端情況如何連接到Oracle數據庫

是不是 如何 () 需要 -s 找到 密碼 dex add 簡介:   在我們開發應用場景經常碰到需要連接Oracle數據庫,這也是相當常見的一種情況。一般.Net環境連接Oracle數據庫,可以通過TNS/SQL.NET 配置文件,而 TNS 必須要 Oracle 客戶端

在資金有限的情況創業公司如何找到合適的開發師

創業公司 原型設計 產品經理 無論你是想要開發網站 還是移動應用,你首先需要做的一件事情,就是給自己找一個合適的開發人員。 然而,創業公司想要在資金有限的情況下找到合適的開發不是一件簡單的事。因為,無論是對於開發人員或是創業公司都是雙向的選擇,創業公司在選擇開發人員考慮的是:

在遠程連接一個 Wndows 10的情況重啟遠程機器

desktop tps ati rem 選項 http 情況下 alt 情況 如果你從菜單找的話,是找不到這個菜單的!!! 你應該直接按 alt + F4 , 就會出現這個選項了。 參考: https://tommynation.com/shut-windows-10