dll中封装ocx,有没有不通过界面关联ocx中的事件?

huazaimh 2010-08-05 05:44:33
现在的情况是这样:
厂家给了一个硬件设备的ocx,而我们的开发模式,是想用dll封装这个ocx
然后调这个dll.

现在的问题是:
我如何将这个ocx中的事件关联,也就是写响应函数吧,因为ocx一般是依附在界面上的,而我不想用界面的方式
有没有像ATL控件那样,通过类,直接这个ocx关联?
或者有更好的办法?或者用COM的方式,ocx本来也是COM方式实现的
不知道如何做,请各位高手指点一下,谢谢!

...全文
79 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaistCoat08 2010-08-06
  • 打赏
  • 举报
回复
直接import得到接口使用可以不?
aamaomao 2010-08-06
  • 打赏
  • 举报
回复
有个想法:
用CCmdTarget派生一个类作为容器,在类中创建那个ocx对象,
用MFC宏映射事件
BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
element_cn 2010-08-06
  • 打赏
  • 举报
回复
没有做过。
用LoadLibrary
huazaimh 2010-08-06
  • 打赏
  • 举报
回复
用import方式,我觉得似乎不可以
可能除了给他一个界面之外没有更好的办法
希望各位高手指点一下,谢谢!
huazaimh 2010-08-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aamaomao 的回复:]
有个想法:
用CCmdTarget派生一个类作为容器,在类中创建那个ocx对象,
用MFC宏映射事件
BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
[/Quote]

这种方法或许可行,可以来试试,周末找时间来试一下
谢谢!
klopow 2010-08-06
  • 打赏
  • 举报
回复
copy from MSDN

_ATL_FUNC_INFO Event1Info1 = { CC_CDECL, VT_EMPTY, 1, { VT_I4 } };

class CEventHandler :
public IDispEventSimpleImpl<1234, CEventHandler, &__uuidof(DMyEventMakerEvents)>
{
public:
BEGIN_SINK_MAP(CEventHandler)
SINK_ENTRY_INFO(1234, __uuidof(DMyEventMakerEvents), 1,
&CEventHandler::OnEvent1, &Event1Info1)
END_SINK_MAP()

void __stdcall OnEvent1(LONG l)
{
if (l != 445533)
{
OutputDebugString(L"l is not 445533\n");
}
}

HRESULT Advise1234(IUnknown * punk)
{
return IDispEventSimpleImpl<1234, CEventHandler,
&__uuidof(DMyEventMakerEvents)>::DispEventAdvise(punk);
}
};
hankcs 2010-08-05
  • 打赏
  • 举报
回复
帮顶,没见过,但是没见过的问题贴更值得收藏啊

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧