Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: ActiveX в IE Добавлено: 06.10.03 10:46  

Автор вопроса:  keg

при размещении ActiveX на html-страничке запрашивается подверждение на передачу контролу параметров. Чтобы подавить это требуется разрешить запуск ActiveX не помеченных как безопасные. Как избежать этого?

Когда создавал контрол, то указал: "Safe for initialisation=yes, Safe for scripting=yes".

Но это как дохлому припарка...

Самое интересное то, что есть пример IObjSafety в котором создается контрол нормально работающий. В нем используется класс IObjSafety.

Но вот повторить этот пример с нуля не получается...

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Swift



Вопросов: 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
Автор ответа:
 keg



Вопросов: 1
Ответов: 5
 Профиль | | #2 Добавлено: 07.10.03 14:57

Такие ключи в реесте имеются...

А вот для контрола созданного на осное MS примера их нет, но зато контрол нормально на странице размещается.

к проекту каким-то образом прикреплен IObjSafe.tlb - это может быть интерфейс написанный на СИ?

Ответить

Номер ответа: 3
Автор ответа:
 Swift



Вопросов: 5
Ответов: 43
 Профиль | | #3 Добавлено: 07.10.03 16:03

Реализация интерфейса на С тебе нужна?

Ответить

Номер ответа: 4
Автор ответа:
 keg



Вопросов: 1
Ответов: 5
 Профиль | | #4 Добавлено: 07.10.03 17:08

давай.

Ответить

Номер ответа: 5
Автор ответа:
 Swift



Вопросов: 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
Автор ответа:
 Swift



Вопросов: 5
Ответов: 43
 Профиль | | #6 Добавлено: 08.10.03 10:37

я же говорил, что это C++ и MFC

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам