Страница: 1 |
Вопрос: ActiveX в IE | Добавлено: 06.10.03 10:46 |
Автор вопроса: ![]() |
при размещении ActiveX на html-страничке запрашивается подверждение на передачу контролу параметров. Чтобы подавить это требуется разрешить запуск ActiveX не помеченных как безопасные. Как избежать этого? Когда создавал контрол, то указал: "Safe for initialisation=yes, Safe for scripting=yes". Но это как дохлому припарка... Самое интересное то, что есть пример IObjSafety в котором создается контрол нормально работающий. В нем используется класс IObjSafety. Но вот повторить этот пример с нуля не получается... |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 43 |
Профиль | Цитата | #1 | Добавлено: 07.10.03 13:02 |
То, что ты указал "Safe for initialisation=yes, Safe for scripting=yes" в пакете установки, это будет работать только инструкция для инсталляции OCX. В реестре нужно добавить два ключа: HKLM,"SOFTWARE\Classes\CLSID\{Твой контлол}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}" HKLM,"SOFTWARE\Classes\CLSID\{Твой контлол}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}" Что касается правильного создания с реализацией интерфейса, то я реализовывал его для С-шных контролов, а вот для VB не пробовал |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 5 |
Профиль | Цитата | #2 | Добавлено: 07.10.03 14:57 |
Такие ключи в реесте имеются... А вот для контрола созданного на осное MS примера их нет, но зато контрол нормально на странице размещается. к проекту каким-то образом прикреплен IObjSafe.tlb - это может быть интерфейс написанный на СИ? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 43 |
Профиль | Цитата | #3 | Добавлено: 07.10.03 16:03 |
Реализация интерфейса на С тебе нужна? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 5 |
Профиль | Цитата | #4 | Добавлено: 07.10.03 17:08 |
давай. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 43 |
Профиль | Цитата | #5 | Добавлено: 07.10.03 19:16 |
MFC. CXPhone2Ctrl - это класс моего контрола. добавить в объявление класса: enum SafetyOptions { SupportedScriptingOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER, SupportedInitOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA }; // Interface map for IObjectSafety BEGIN_INTERFACE_PART(MySafetyObj, IObjectSafety) INIT_INTERFACE_PART(CSafeCtrl, MySafetyObj) STDMETHOD(GetInterfaceSafetyOptions)(REFIID, DWORD*, DWORD*); STDMETHOD(SetInterfaceSafetyOptions)(REFIID, DWORD, DWORD); END_INTERFACE_PART(MySafetyObj) DECLARE_INTERFACE_MAP() В файле .сpp: //Interface map BEGIN_INTERFACE_MAP(CXPhone2Ctrl, COleControl) INTERFACE_PART(CXPhone2Ctrl, IID_IObjectSafety, MySafetyObj) END_INTERFACE_MAP() В конструкторе: CXPhone2Ctrl::CXPhone2Ctrl() { m_supportedScriptingOptions=SupportedScriptingOptions; m_supportedInitOptions=SupportedInitOptions; m_enabledScriptingOptions=0; m_enabledInitOptions=0; } Функции: //Safety STDMETHODIMP_(ULONG) CXPhone2Ctrl::XMySafetyObj::AddRef( ) { METHOD_MANAGE_STATE(CXPhone2Ctrl, MySafetyObj) ASSERT_VALID(pThis);
return pThis->ExternalAddRef(); } STDMETHODIMP_(ULONG) CXPhone2Ctrl::XMySafetyObj::Release( ) { METHOD_MANAGE_STATE(CXPhone2Ctrl, MySafetyObj) ASSERT_VALID(pThis);
return pThis->ExternalRelease(); } STDMETHODIMP CXPhone2Ctrl::XMySafetyObj::QueryInterface(REFIID iid, LPVOID FAR* ppvObj) { METHOD_MANAGE_STATE(CXPhone2Ctrl, MySafetyObj) ASSERT_VALID(pThis);
return pThis->ExternalQueryInterface((void *)&iid, ppvObj); } STDMETHODIMP CXPhone2Ctrl::XMySafetyObj::GetInterfaceSafetyOptions( REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions) { METHOD_PROLOGUE(CXPhone2Ctrl, MySafetyObj) ASSERT_VALID(pThis); if (!pdwSupportedOptions || !pdwEnabledOptions) return E_POINTER; if (riid == IID_IDispatch) { *pdwSupportedOptions = pThis->m_supportedScriptingOptions; *pdwEnabledOptions = pThis->m_enabledScriptingOptions; return S_OK; } else if (riid == IID_IPersistPropertyBag) { *pdwSupportedOptions = pThis->m_supportedInitOptions; *pdwEnabledOptions = pThis->m_enabledInitOptions; return S_OK; } else if (TRUE) { *pdwSupportedOptions = *pdwEnabledOptions = 0; return E_FAIL; } else return E_NOINTERFACE; } STDMETHODIMP CXPhone2Ctrl::XMySafetyObj::SetInterfaceSafetyOptions( REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions) { METHOD_MANAGE_STATE(CXPhone2Ctrl, MySafetyObj) ASSERT_VALID(pThis); if (riid == IID_IDispatch) { if ((dwOptionSetMask & pThis->m_supportedScriptingOptions) == dwOptionSetMask) { DWORD dwNewOptions = dwOptionSetMask & dwEnabledOptions; pThis->m_enabledScriptingOptions = (pThis->m_enabledScriptingOptions & ~dwOptionSetMask) | dwNewOptions; return S_OK; } else return E_FAIL;//return S_OK; } else if (riid == IID_IPersistPropertyBag) { if ((dwOptionSetMask & pThis->m_supportedInitOptions) == dwOptionSetMask) { DWORD dwNewOptions = dwOptionSetMask & dwEnabledOptions; pThis->m_enabledInitOptions = (pThis->m_enabledInitOptions & ~dwOptionSetMask) | dwNewOptions; return S_OK; } else return E_FAIL;//return S_OK; } else if (TRUE) return E_FAIL; else return E_NOINTERFACE; } |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 43 |
Профиль | Цитата | #6 | Добавлено: 08.10.03 10:37 |
я же говорил, что это C++ и MFC |
Страница: 1 |
|