不好意思~打擾大家了! ^_^因為最近的工作也是被分派到要弄MFC 的 activex,
可是卻遇到一個問題,就是在本機的時候(D:\home\fan.htm),activex都可正常運行,可看到activex所產生的圖,但是若網址是打http://127.0.0.1/...這種的,圖就無法顯現,會出現紅色叉叉。
在網路上找了好久,程式也有加上安全接口(const CATID CLSID_SafeItem =
{0x36299202, 0x9ef, 0x4abf,{ 0xad, 0xb9, 0x47, 0xc5, 0x99, 0xdb, 0xe7, 0x78}};....),但問題卻還是存在,不見有好的解決方法。最後不好意思只能來這請教大家。謝謝! ^^
可是卻遇到一個問題,就是在本機的時候(D:\home\fan.htm),activex都可正常運行,可看到activex所產生的圖,但是若網址是打http://127.0.0.1/...這種的,圖就無法顯現,會出現紅色叉叉。
在網路上找了好久,程式也有加上安全接口(const CATID CLSID_SafeItem =
{0x36299202, 0x9ef, 0x4abf,{ 0xad, 0xb9, 0x47, 0xc5, 0x99, 0xdb, 0xe7, 0x78}};....),但問題卻還是存在,不見有好的解決方法。最後不好意思只能來這請教大家。謝謝! ^^
恩恩~我有把安全級別設過了,也有把activex有關的選項啟動了,可還是不行耶回wshcdr~
請問依赖的 MFC库 文件是指什麼呢?
我用的是同一台機器測,差別只是一個是C:\ 在本機直接讀的(可以執行),而另一種則是http://讀的(不能執行)。如果需要看原始碼,請看http://140.114.71.160/~yitfan/rabbit.rar謝謝大家幫忙! ^_^
class ATL_NO_VTABLE CYourClass : //从IObjectSafetyImpl派生
public IObjectSafetyImpl<CYourClass,INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>
{
BEGIN_COM_MAP(CChatObj)
COM_INTERFACE_ENTRY(IObjectSafety)//添加映射
END_COM_MAP()
}
恩~路徑確認無誤耶~這就是怪的地方了~一直找不出問題~
謝謝回文喔! ^_^
我的網頁就是簡單的html耶!
至於安全接口那個我是參考http://www.codeproject.com/KB/COM/CompleteActiveX.aspx,
這個網頁裡Building a Safe ActiveX Control去設的。
可是就是http://的時候,activex就不能運行。這是為什麼呢?
恩恩~好好~ㄧ定ㄧ定喔!回xyz378704~
是沒有安裝到嘛?可是我打完http://127.0.0.1/rabbit.htm後,
檢查電腦裡,確實是有下載到rabbit control的,這樣不表示有安裝嘛?
那要怎樣才能讓她真的有安裝呢? 謝謝回復喔! ^_^
所以我的.ocx連手動註冊都失敗嘛?
所以是我編譯的程式碼有誤嘛?
謝謝回文喔~ ^_^
我檢查了所下載的rabbit control所顯示的狀態是已安裝,
且顯示的classid和我網頁寫的也都一樣。
謝謝回文喔! ^_^
不好意思~那你可以下載我的程式碼~在你的電腦跑跑看嗎?
我想要測試是不是我程式有誤~
謝謝回文喔! ^_^
参考这做安全接口
恩~試了耶~
還是不行,你可以了嗎?
那试了以后编译连接可以通过吗?
你得把自己机上的注册的那个控件删了才行啊,点工具书-->internet选项->设置->查看对象,把你原来机子上的注册的控件删了默认在这个目录下C:\WINDOWS\Downloaded Program Files
1. 在工程中找到xxxCtrl类,在DECLARE_DYNCREATE(xxxCtrl)后面添加以下代码
//定义IObjectSafety
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)
STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions
); STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (
/* [in] */ REFIID riid,
/* [in] */ DWORD dwOptionSetMask,
/* [in] */ DWORD dwEnabledOptions
);
END_INTERFACE_PART(ObjSafe);
//完成定义IObjectSafety
2. 添加头文件 #include <objsafe.h>
3. 在实现xxxCtrl类代码中添加如下代码
BEGIN_INTERFACE_MAP( xxxxCtrl, COleControl )
INTERFACE_PART(xxxxCtrl, IID_IObjectSafety, ObjSafe)
END_INTERFACE_MAP()//.............................................................................
// IObjectSafety member functions// Delegate AddRef, Release, QueryInterfaceULONG FAR EXPORT xxxxCtrl::XObjSafe::AddRef()
{
METHOD_PROLOGUE(xxxxCtrl, ObjSafe)
return pThis->ExternalAddRef();
}ULONG FAR EXPORT xxxxCtrl::XObjSafe::Release()
{
METHOD_PROLOGUE(xxxxCtrl, ObjSafe)
return pThis->ExternalRelease();
}HRESULT FAR EXPORT xxxxCtrl::XObjSafe::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(xxxxCtrl, ObjSafe)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}const DWORD dwSupportedBits =
INTERFACESAFE_FOR_UNTRUSTED_CALLER |
INTERFACESAFE_FOR_UNTRUSTED_DATA;
const DWORD dwNotSupportedBits = ~ dwSupportedBits;//.............................................................................
// CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions
// Allows container to query what interfaces are safe for what. We're
// optimizing significantly by ignoring which interface the caller is
// asking for.
HRESULT STDMETHODCALLTYPE
xxxxCtrl::XObjSafe::GetInterfaceSafetyOptions(
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions)
{
METHOD_PROLOGUE(xxxxCtrl, ObjSafe) HRESULT retval = ResultFromScode(S_OK); // does interface exist?
IUnknown FAR* punkInterface;
retval = pThis->ExternalQueryInterface(&riid,
(void * *)&punkInterface);
if (retval != E_NOINTERFACE) { // interface exists
punkInterface->Release(); // release it--just checking!
}
// we support both kinds of safety and have always both set,
// regardless of interface
*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits; return retval; // E_NOINTERFACE if QI failed
}/////////////////////////////////////////////////////////////////////////////
// CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions
// Since we're always safe, this is a no-brainer--but we do check to make
// sure the interface requested exists and that the options we're asked to
// set exist and are set on (we don't support unsafe mode).
HRESULT STDMETHODCALLTYPE
xxxxCtrl::XObjSafe::SetInterfaceSafetyOptions(
/* [in] */ REFIID riid,
/* [in] */ DWORD dwOptionSetMask,
/* [in] */ DWORD dwEnabledOptions)
{
METHOD_PROLOGUE(xxxxCtrl, ObjSafe)
// does interface exist?
IUnknown FAR* punkInterface;
pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);
if (punkInterface) { // interface exists
punkInterface->Release(); // release it--just checking!
}
else { // interface doesn't exist
return ResultFromScode(E_NOINTERFACE);
} // can't set bits we don't support
if (dwOptionSetMask & dwNotSupportedBits) {
return ResultFromScode(E_FAIL);
}
// can't set bits we do support to zero
dwEnabledOptions &= dwSupportedBits;
// (we already know there are no extra bits in mask )
if ((dwOptionSetMask & dwEnabledOptions) !=
dwOptionSetMask) {
return ResultFromScode(E_FAIL);
}
// don't need to change anything since we're always safe
return ResultFromScode(S_OK);
}