[不指定 2006/01/13 09:56 | by turbozv ]
     今天回来折腾到现在才差不多搞定,网上的资料确实不多,我是连蒙带猜才明白其中的门道。


      我的目标是用VC C++ SDK使用机器上的ActiveX控件,当然你要说有MFC, ATL使用非常方便,可是我们现在需要一个Pure C++/SDK的实现。微软的MSDN查了等于白查,堆积如山的知识完全无法迅速掌握。


      我因为之前用过MFC的自动导入ActiveX控件工具,所以我相信C++/SDK也一样可以自动生成封装好的接口类文件,不过就是我还没有发现而已。于是开始我漫长的寻找中,终于我找到 OLE/COM Object Viewer 这个VC自带的工具,打开里面的Type Libraries,里面全部是系统已经注册的ActiveX控件列表,我马上选择Shockwave Flash,双击查看,总于我找到了从Ocx/Dll生成IDL的办法。


      IDL就是接口描述语言,有了这个就向成功迈了一步了,但是这个时候我对下一步怎么做依然毫无头绪。又在google上晃悠了一阵,看到一篇文章教你怎么用一个COM接口扩展Explorer,由于好奇,我打开了他说的一个系统头文件Program FilesMicrosoft Visual StudioVC98IncludeEXDISP.H,我的眼睛突然一亮!一方面是我看到EXDISP.IDL也在这里,这就意味着我的Flash.IDL也可以生成我要的Flash.H;另一方面我看到EXDISP.H中的注解 /* File created by MIDL compiler version 3.02.88 */。这下我笑了:)


    于是注意力转到MIDL这个工具上来,/help以后的参数异常的多,经过反复测试,终于发现一个参数/header filename,赶紧一试,于是.h, .c全部生成出来了。 呵呵,剩下的事情就非常简单了。不用多非唇舌了。


      用SDK做东西就是累一点,不过感觉挺爽的
程序 | 评论(13) | 引用(0) | 阅读(23635)
178999yy
2008/10/07 21:06
听你的讲解一点都不爽.都不知道说什么,什么非常简单.
34545trgrthgrt
2008/10/07 17:53
网上资料确实很多,说的都跟你一样,说了等于没有说.具体怎么做啊,大哥?你觉得很简单,到底怎么简单啊
reaky
2008/07/10 01:00
我用oleview生成msword.idl,然后用midl msword.idl结果一堆错误?
.\msword.idl(15) : warning MIDL2015 : failed to load tlb in importlib: : VBE6EXT.OLB
.\msword.idl(17) : warning MIDL2015 : failed to load tlb in importlib: : MSO.DLL
.\msword.idl(739) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(851) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(887) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(926) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(962) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(976) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(1182) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(1194) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(1243) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(2039) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(2639) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(2883) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(3048) : error MIDL2003 : redefinition : emptyenum
.\msword.idl(3246) : error MIDL2025 : syntax error : expecting a type specification near "Application"
.\msword.idl(3246) : error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation
实在解决不了,望指教!
UMU Email Homepage
2007/10/28 04:42
一直不喜欢 C++
COM 还是用 C 写一次,理解才透彻
SWORD
2006/03/24 08:59
这是基础知识啊,有这么难吗?用过ATL还不知道MIDL和OLEVIEW的等于没用过。
管理员 回复于 2006/03/24 10:37
问题时我没有用过ATL/MFC
turbozv
2006/03/01 01:01
需要OLE相关的东西了,大家可以看看这篇帖子:
http://www.codeguru.com/Cpp/I-N/ieprogram/article.php/c4379/
Jack Email
2006/02/19 23:46
如果有 Sample 就更好了, 我正在开发的软件只用SDK, 所以正在头痛这个东西. 是不是还要用 CAxWindow ? 我用 CAxWindow 实现了一个, 不过不知道怎么实现它的事件, FSCommand. Flash 需要和 c++ 通讯.
Allen Email
2006/01/23 23:52
如果我用windows SDK不用MFC/ATL,那么我在窗体上插入一个flash的activeX控件,怎么操作它?
chrislgh
2006/01/17 19:40
嗯. 中间件技术是堂子很深的东西啊.
turbozv
2006/01/16 03:56
http://support.microsoft.com/kb/q192560/
How to add ATL control containment support to any window in Visual C++
turbozv
2006/01/16 03:56
It is not an easy job, refer to the following in MSDN:
Non-MFC Application. If you are adding control containment to a non-MFC application, see Control Containers in Chapter 19 of Adam Denning's book OLE Controls Inside Out (Microsoft Press 1995).
bur
2006/01/14 21:19
哇,境界!24
Seraph
2006/01/13 23:29
怪不得这段时间这么忙,真是羡慕你对技术和代码的这种专研劲!good
分页: 1/1 第一页 1 最后页