请教如何实现IObjectSafety接口?vc,delphi均可

请问怎么实现IObjectSafety接口?vc,delphi均可。
最近用delphi7做了个以 TActiveForm 为基类的ActiveX 控件,用远端电脑在IE中访问时总是不允许安装,提示未知发行商之类的。很久前听说实现 IObjectSafety 接口可以解决这问题,但是网上好多代码我都试了,不行。或许以前的2000系统能实现,现在的(带sp2以上补丁)xp系统都不行了。望各位指教。万分感谢。

注:
  购买CA证书就免了,没钱。设置浏览器Internet选项也免了,终端用户不接受这么繁琐的设置步骤。如果有js脚本可以控制设置Internet选项,那是可以考虑。

顺便做个小广告:
  充值:http://v-cyz.taobao.com/

------解决方案--------------------
提示未知发行商之类的 这个必须有证书
实现IObjectSafety 接口 也只能标记为安全
如果不标记安全 就在ActiveX安装好后,在IE中运行就会提示不安全

标记为安全的代码


 头文件部分
------------------------------
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);

-------------------------------


实现部分
-------------------------------
BEGIN_INTERFACE_MAP( 你的xxxCtrl, COleControl )
INTERFACE_PART(你的xxxCtrl, IID_IObjectSafety, ObjSafe)
END_INTERFACE_MAP()

/////////////////////////////////////////////////////////////////////////////
// IObjectSafety member functions

// Delegate AddRef, Release, QueryInterface

ULONG FAR EXPORT 你的xxxCtrl::XObjSafe::AddRef()
{
METHOD_PROLOGUE(你的xxxCtrl, ObjSafe)
return pThis->ExternalAddRef();
}

ULONG FAR EXPORT 你的xxxCtrl::XObjSafe::Release()
{
METHOD_PROLOGUE(你的xxxCtrl, ObjSafe)
return pThis->ExternalRelease();
}

HRESULT FAR EXPORT 你的xxxCtrl::XObjSafe::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(你的xxxCtrl, 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
你的xxxCtrl::XObjSafe::GetInterfaceSafetyOptions(
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions)
{
METHOD_PROLOGUE(你的xxxCtrl, 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!
}