ActiveX控制項實現安全的初始化和指令碼

2021-09-12 02:01:56 字數 4546 閱讀 7666

想建立乙個能夠在ie中成功載入而沒有「不安全」的警告或者錯誤提示資訊的activex控制項,我們必須實現安全的初始化和指令碼。基本上,所有要做的工作都是在dllregisterserver 和dllunregisterserver這兩個函式中完成的。下面,我們就來一步步地將我們的activex控制項變成乙個「安全的」控制項。

1. 編輯***(此處為控制項的工程名).cpp並新增如下的**。其中,clsid_safeitem的值應該跟***ctrl.cpp中的implement_olecreate_ex一致,這就等同於你的activex控制項。同樣,它也應該跟你的html頁面中的objectid標籤中的clsid一致。

以下是我工程中為實現安全的初始化和指令碼新增的**,可以與原先ide自動生成的部分做對比檢視那些部分是新增的,哪些部分是在建立activex控制項時自動生成的**:

#include "stdafx.h"

#include "ccea.h"

#include "comcat.h"

#include "strsafe.h"

#include "objsafe.h"

#ifdef _debug

#define new debug_new

#endif

/*const guid cdecl based_code _tlid =

};*/

const guid cdecl based_code _tlid =

};const guid cdecl clsid_safeitem =

};const word _wvermajor = 1;

const word _wverminor = 0;

return binit;}

//建立component categories中的初始化安全和指令碼安全項

hresult createcomponentcategory(catid catid, wchar* catdescription)

鍵值被註冊

categoryinfo catinfo;

catinfo.catid = catid;

catinfo.lcid = 0x0409; // english

//size_t len;

// 確認描述不是太長。

// 只複製開始的127個字元。

// stringcchlength的第二個引數表示被讀入catdescription的最大字元數。

// 第三個引數表示字串的長度

//hr = stringcchlength(catdescription, strsafe_max_cch, &len);

int len = wcslen(catdescription);

if (succeeded(hr))

}

else

wcsncpy(catinfo.szdescription, catdescription, len);

//hr = stringcchcopy(catinfo.szdescription, len + 1, catdescription);

// 新增字串結束符.

+ 1] = '\0';

catinfo.szdescription[len] = '/0';

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

pcr->release();

return hr;}

2. 然後需要新增註冊元件分類資訊

同樣是在***(此處為控制項的工程名).cpp並新增如下的**:

//在clsid中建立與component categories中初始化安全和指令碼安全項中相對應的implemented categories項

hresult registerclsidincategory(refclsid clsid, catid catid)

if (pcr != null)

pcr->release();

return hr; }

//登出與clsid中的相應implemented categories項,一般用不到,因為其它程式可能也會用到這此項

hresult unregisterclsidincategory(refclsid clsid, catid catid)

if (pcr != null)

pcr->release();

return hr;

}

這兩個方法是全新的必須新增。

3. 需要修改dllregisterserver函式如下,可以與原先ide自動生成的部分做對比檢視需要增加的部分:

// dllregisterserver - 將項新增到系統登錄檔

stdapi dllregisterserver(void)

4. 最後修改修改dllunregisterserver函式,可以與原先ide自動生成的部分做對比檢視需要增加的部分:

// dllunregisterserver - 將項從系統登錄檔中移除

stdapi dllunregisterserver(void)

#include "stdafx.h"

#include "ccea.h"

#include "comcat.h"

#include "strsafe.h"

#include "objsafe.h"

#ifdef _debug

#define new debug_new

#endif

/*const guid cdecl based_code _tlid =

};*/

const guid cdecl based_code _tlid =

};const guid cdecl clsid_safeitem =

};const word _wvermajor = 1;

const word _wverminor = 0;

return binit;}

//建立component categories中的初始化安全和指令碼安全項

hresult createcomponentcategory(catid catid, wchar* catdescription)

鍵值被註冊

categoryinfo catinfo;

catinfo.catid = catid;

catinfo.lcid = 0x0409; // english

//size_t len;

// 確認描述不是太長。

// 只複製開始的127個字元。

// stringcchlength的第二個引數表示被讀入catdescription的最大字元數。

// 第三個引數表示字串的長度

//hr = stringcchlength(catdescription, strsafe_max_cch, &len);

int len = wcslen(catdescription);

if (succeeded(hr))

}

else

wcsncpy(catinfo.szdescription, catdescription, len);

//hr = stringcchcopy(catinfo.szdescription, len + 1, catdescription);

// 新增字串結束符.

+ 1] = '\0';

catinfo.szdescription[len] = '/0';

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

pcr->release();

return hr;}

//在clsid中建立與component categories中初始化安全和指令碼安全項中相對應的implemented categories項

hresult registerclsidincategory(refclsid clsid, catid catid)

if (pcr != null)

pcr->release();

return hr; }

//登出與clsid中的相應implemented categories項,一般用不到,因為其它程式可能也會用到這此項

hresult unregisterclsidincategory(refclsid clsid, catid catid)

if (pcr != null)

pcr->release();

return hr;}

// dllregisterserver - 將項新增到系統登錄檔

stdapi dllregisterserver(void)

// dllunregisterserver - 將項從系統登錄檔中移除

stdapi dllunregisterserver(void)

這時你就能建立乙個能夠在ie中成功載入而沒有「不安全」的警告或者錯誤提示資訊的activex控制項了。

c 實現的ActiveX控制項

雖然應用範圍有限,但也算是一種嘗試吧。using system.runtime.interopservices namespace actwsz classinte ce classinte cetype.autodual public class acttest iact public strin...

vb的activeX控制項

vb6做了乙個簡單的activex控制項,還算是簡單,在專案選擇上選activex控制項,就會出現乙個沒有邊框的form,隨便放上乙個label,設定是center 中間對齊 選擇背景黑色,前景紅色,字型24,和vc比起來,vb可以設定字型大小,背景和前景顏色,vc可以設定y方向上的center。v...

乙個ActiveX控制項安全註冊的例子

include include include dllregisterserver adds entries to the system registry 原來的 被注釋 stdapi dllregisterserver void dllunregisterserver removes entrie...