谢谢moonpiazza(月下小生),我用VC写了个ActiveX控件,可是用<objcect>加入到Web页面中时,打开页面是会出来一个对话框,内容是:该网面上的某些软件(ActiveX)可能不安全.建议您不要运行.是否允许运行?可是我用其它windows里面的软件时不会出现这个对话框,请问怎么解决啊?

解决方案 »

  1.   

    这是ie的安全级别设置的问题,不是你的程序的事,你可以在 
    ie菜单-》工具-》internal选项中-》安全里找到设置active选项不好意思:)
      

  2.   

    如果这样的话,那在web开发时不就不能自己写activex组件了吗?因为降低ie的安全级别是不太可能行得通的吧.你以前没碰到类似这样的情况吗?
      

  3.   

    你可以生成一个客户端程序,此程序只包装一个HtmlView,不用别的代码。
      

  4.   

    实现IObjectSafety接口class ATL_NO_VTABLE YourClass : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<YourClass, &CLSID_YourClass>,
    ...
    public IObjectSafetyImpl<YourClass, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
    ...
    {
    }
      

  5.   

    1。实现IObjectSafety接口
    2。进行数字签名。
      

  6.   

    在网页中创建ActiveX对象,客户端如何设置才能不出现安全警告?
    http://expert.csdn.net/Expert/topic/1776/1776288.xml?temp=.4067499
      

  7.   

    class ATL_NO_VTABLE YourClass : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<YourClass, &CLSID_YourClass>,
    ...
    public IObjectSafetyImpl<YourClass, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>
    ...
    {BEGIN_COM_MAP(CPlaybackClientCtrl)
    COM_INTERFACE_ENTRY(IObjectSafety)
    END_COM_MAP()
    }
      

  8.   

    不好意思,我是第一次用VC写组件,我没用ATL,而是用的MFC方式,请问在MFC方式写的怎么实现你们说的IObjectSafety接口啊?还望得到你们的指点,谢谢!
      

  9.   

    //////////////////////////////////////////////////////////////// 
        // Copied from the ActiveX SDK 
        // This code is used to register and unregister a 
        // control as safe for initialization and safe for scripting 
         
        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; 
        } 
         
         
        /***************************************** 
        在 xxxctl.cpp 文件中添加如下两个头文件 
        *****************************************/ 
        #include "comcat.h" 
        #include "objsafe.h" 
         
        /***************************************** 
        修改如下函数 
        *****************************************/ 
        BOOL CxxxCtrl::CxxxCtrlFactory::UpdateRegistry(BOOL bRegister) 
        { 
        // TODO: Verify that your control follows apartment-model threading rules. 
        // Refer to MFC TechNote 64 for more information. 
        // If your control does not conform to the apartment-model rules, then 
        // you must modify the code below, changing the 6th parameter from 
        // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable. 
         
        if (bRegister) 
        { 
        HRESULT hr = S_OK ; 
         
        // register as safe for scripting 
        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; 
         
        // register as safe for initializing 
        hr = CreateComponentCategory(CATID_SafeForInitializing, 
        L"Controls safely initializable from persistent 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_DIEROLL, 
        IDB_DIEROLL, 
        afxRegInsertable | afxRegApartmentThreading, 
        _dwDierollOleMisc, 
        _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); 
        } 
        } http://expert.csdn.net/Expert/topic/883/883994.xml?temp=.9010279
      

  10.   

    vagabondkq(birder),你说和上半部分代码是放在程序中的哪个位置啊。我把你的代码放在同一文件中好象不行啊,你能说清楚一点吗?谢谢!