在VC++环境中,使用OCX会变得比较简单和快捷。
在Dialog中插入ActiveX,如:Shockwave Flash Object。
在建立了Dialog的类之后,为刚才插入的Flash 控件添加变量,
MFC会自动帮我们生成两个文件:CShockwaveFlash1.h和CShockwaveFlash1.cpp有了这两个文件,就可以很容易控制Flash了。
2. 通过MIDL生成TLB文件
MFC包装类固然简单,但很明显缺乏一些高级的功能,此时就需要采用纯COM的方式了。
首先使用OLE/COM Object Viewer来找到Shockwave Flash Object,如下图:

MIDL SWF.IDL /tlb SWF.tlb,即可生成tlb文件。
如果生成过程有错,提示“error MIDL2110 : end of file found in string”,可以这样做:将前面打开的界面中(“View Type Information”)的内容拷贝,然后手动新建一个SWF.IDL的文件,将拷贝的内容粘贴入,再次执行MIDL命令。
接下来在你的VC++项目中:#import "SWF.tlb",编译之,即会在debug或者release
目录下面生成tlh(头文件,header)和tli文件(实现文件,implementation)。
注意,在tlh文件的末尾处已经包含了tli文件。
当然也可以采用下面叙述的方式生成。
3. 相关概念
多数情况下,生成的com组件DLL/EXE/OCX已经包含了类型库信息(type information),但当你的com程序足够大,可能需要分离类型库信息,此时考虑生成tlb[/B]文件,单独存放类型库。
此时使用:#import "XXX.tlb",然后编译之,也会在debug或者release下面产生 XXX.tli和XXX.tlh文件。
tlh 和tli文件实际上是对com接口及其属性方法的封装类,其中tlh[/B]相当于类型申明(头文件),tli相当于定义实现(CPP文件),这里的实现完全是封装方法的实现,而不是com接口方法的实现。
如下例:
inline int IShockwaveFlash::GetQuality ( ) {
int _result = 0;
HRESULT _hr = get_Quality(&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _result;
}
其中get_Quality的真正实现实际上在XXX.ocx或者XXX.dll中。
4. 开始创建IShockwaveFlash