首页 / C++ / C++开发ActiveX控件相关事项
C++开发ActiveX控件相关事项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++开发ActiveX控件相关事项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3185字,纯文字阅读大概需要5分钟。
内容图文
![C++开发ActiveX控件相关事项](/upload/InfoBanner/zyjiaocheng/1321/9fa4e9898d7d496280e41aea7bbb1e07.jpg)
1.UUID值:
XXXX.idl最下部:
// CMsgPromptCtrl 的类信息
[
uuid(84045072-8AA6-40D2-A641-0097F7F6650F)
]
coclass MsgPrompt
{
[default] dispinterface _DMsgPrompt;
[default, source] dispinterface _DMsgPromptEvents;
};
2.安全代码:
在XXXCtrl.h中添加
#include <objsafe.h>
//安全代码
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)
STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (
REFIID riid,
DWORD __RPC_FAR *pdwSupportedOptions,
DWORD __RPC_FAR *pdwEnabledOptions
);
STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (
REFIID riid,
DWORD dwOptionSetMask,
DWORD dwEnabledOptions
);
END_INTERFACE_PART(ObjSafe);
在XXXXCtrl.Cpp中添加:
//安全代码
BEGIN_INTERFACE_MAP( CMsgPromptCtrl, COleControl )
INTERFACE_PART(CMsgPromptCtrl, IID_IObjectSafety, ObjSafe)
END_INTERFACE_MAP()
//安全代码;
ULONG FAR EXPORT CMsgPromptCtrl::XObjSafe::AddRef()
{
METHOD_PROLOGUE(CMsgPromptCtrl, ObjSafe)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CMsgPromptCtrl::XObjSafe::Release()
{
METHOD_PROLOGUE(CMsgPromptCtrl, ObjSafe)
return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CMsgPromptCtrl::XObjSafe::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CMsgPromptCtrl, ObjSafe)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
const DWORD dwSupportedBits =
INTERFACESAFE_FOR_UNTRUSTED_CALLER |
INTERFACESAFE_FOR_UNTRUSTED_DATA;
const DWORD dwNotSupportedBits = ~ dwSupportedBits;
HRESULT STDMETHODCALLTYPE CMsgPromptCtrl::XObjSafe::GetInterfaceSafetyOptions(
REFIID riid,
DWORD __RPC_FAR *pdwSupportedOptions,
DWORD __RPC_FAR *pdwEnabledOptions
)
{
METHOD_PROLOGUE(CMsgPromptCtrl, ObjSafe)
HRESULT retval = ResultFromScode(S_OK);
// 接口是否存在
IUnknown FAR* punkInterface;
retval = pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);
if (retval != E_NOINTERFACE) // 接口存在
{
punkInterface->Release(); // 释放引用
}
// We support both kinds of safety and have always both set,
// regardless of interface.
*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits;
return retval; // E_NOINTERFACE if QI failed
}
//////////////////////////////////////////////////////////// /////////////////
// CXXXCtrl::XObjSafe::SetInterfaceSafetyOptions
HRESULT STDMETHODCALLTYPE CMsgPromptCtrl::XObjSafe::SetInterfaceSafetyOptions(
REFIID riid,
DWORD dwOptionSetMask,
DWORD dwEnabledOptions
)
{
METHOD_PROLOGUE(CMsgPromptCtrl, ObjSafe)
// 接口是否存在
IUnknown FAR* punkInterface;
pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);
if (punkInterface) // 接口存在
{
punkInterface->Release(); // 释放引用
}
else // 接口不存在
{
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);
}
3.添加接口和事件:
添加接口:
XXXXLib下的DXXXX右键-->添加-->添加方法
添加事件:
XXXXCtrl右键-->添加-->添加事件
原文:http://www.cnblogs.com/ZhJRecord/p/5175398.html
内容总结
以上是互联网集市为您收集整理的C++开发ActiveX控件相关事项全部内容,希望文章能够帮你解决C++开发ActiveX控件相关事项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。