我用了别人用VC做的一个OCX控件,另外我自己用Delphi做了一个ocx控件, 各自进行了数字签名以后,Delphi的控件可以下载并运行,VC的控件可以下载,但是运行时提示
"当前安全方式禁止...", 只有把internet 安全选项"对没有标记为安全的ActiveX进行初始化..." 由禁用改为启用才可以,应该怎么解决等待各位高手答案.

解决方案 »

  1.   

    你需要将你的ocx控件声明为安全的类型,先注册一个安全种类,然后把你的ocx加入到这个种类里面,就可以了,具体:
    // Webmonitor.cpp : Implementation of CWebmonitorApp and DLL registration.#include "stdafx.h"
    #include "Webmonitor.h"
    #include "comcat.h"
    #include "Objsafe.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    CWebmonitorApp NEAR theApp;const GUID CDECL BASED_CODE _tlid =
    {  };// ±¾¿Ø¼þµÄCLSID,×¢²á±íÓÃ
    const GUID CDECL CLSID_SafeItem =
    { };
    const WORD _wVerMajor = 1;
    const WORD _wVerMinor = 0;
    ////////////////////////////////////////////////////////////////////////////
    // CWebmonitorApp::InitInstance - DLL initializationBOOL CWebmonitorApp::InitInstance()
    {
    BOOL bInit = COleControlModule::InitInstance(); if (bInit)
    {
    // TODO: Add your own module initialization code here.
    }
    // AfxEnableControlContainer();
    return bInit;
    }
    ////////////////////////////////////////////////////////////////////////////
    // CWebmonitorApp::ExitInstance - DLL terminationint CWebmonitorApp::ExitInstance()
    {
    // TODO: Add your own module termination code here. return COleControlModule::ExitInstance();
    }
    /***************************************************************************
    * ´´½¨×é¼þÖÖÀà

    *
    ****************************************************************************/
    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 hr;    // Make sure the HKCR\Component Categories\{..catid...}
        // key is registered.
        CATEGORYINFO catinfo;
        catinfo.catid = catid;
        catinfo.lcid = 0x0409 ; // english    // Make sure the provided description is not too long.
        // Only copy the first 127 characters if it is.
        int len = wcslen(catDescription);
        if (len>127)
            len = 127;
        wcsncpy(catinfo.szDescription, catDescription, len);
        // Make sure the description is null terminated.
        catinfo.szDescription[len] = '\0';    hr = pcr->RegisterCategories(1, &catinfo);
            pcr->Release();    return hr;
    }/***************************************************************************
    * ×¢²á×é¼þÖÖÀà

    *
    ****************************************************************************/
    HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
    {
        // Register your component categories information.
        ICatRegister* pcr = NULL ;
        HRESULT hr = S_OK ;
        hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
                    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
        if (SUCCEEDED(hr))
        {
           // Register this category as being "implemented" by the class.
           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))
        {
           // Unregister this category as being "implemented" by the class.
           CATID rgcatid[1] ;
           rgcatid[0] = catid;
           hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
        }    if (pcr != NULL)
            pcr->Release();    return hr;
    }
    /////////////////////////////////////////////////////////////////////////////
    // DllRegisterServer - Adds entries to the system registrySTDAPI DllRegisterServer(void)
    {
    HRESULT hr; AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
    return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
    return ResultFromScode(SELFREG_E_CLASS);    // ±ê¼Ç¿Ø¼þ³õʼ»¯°²È«.
        // ´´½¨³õʼ»¯°²È«×é¼þÖÖÀà
        hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");
        if (FAILED(hr))
            return hr;
        // ×¢²á³õʼ»¯°²È«
        hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);
        if (FAILED(hr))
            return hr;    // ±ê¼Ç¿Ø¼þ½Å±¾°²È«
        // ´´½¨½Å±¾°²È«×é¼þÖÖÀà 
        hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");
        if (FAILED(hr))
            return hr;
        // ×¢²á½Å±¾°²È«×é¼þÖÖÀà
        hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
        if (FAILED(hr))
            return hr; return NOERROR;
    /*
    AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
    return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
    return ResultFromScode(SELFREG_E_CLASS); return NOERROR;
    */
    }
    /////////////////////////////////////////////////////////////////////////////
    // DllUnregisterServer - Removes entries from the system registrySTDAPI DllUnregisterServer(void)
    {
    // HRESULT hr; AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
    return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
    return ResultFromScode(SELFREG_E_CLASS);
    /*
        // É¾³ý¿Ø¼þ³õʼ»¯°²È«Èë¿Ú.
        hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);
        if (FAILED(hr))
            return hr;
        // É¾³ý¿Ø¼þ½Å±¾°²È«Èë¿Ú
        hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
        if (FAILED(hr))
            return hr;
    */
    return NOERROR;/*
    AFX_MANAGE_STATE(_afxModuleAddrThis); if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
    return ResultFromScode(SELFREG_E_TYPELIB); if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
    return ResultFromScode(SELFREG_E_CLASS); return NOERROR;
    */
    }
      

  2.   

    http://www.vckbase.com/code/downcode.asp?id=2004