1.activeX控件采用组建对象模型(COM),即标题所说COM控件。
2.文中主要介绍两种类型:第一是以.ocx结尾的,第二是以.dll结尾的。
3.注册.ocx的方法之一:
Regserv32 c:\myctl.ocx
或者Regserv32 /s c:\myctl.ocx
4.VC2008下加载.ocx控件
工程资源——Toolbox最下方空白处(右键)——选择choose Items...——弹出Choose ToolBox Items——COM Components中选择已注册的控件
在Toolbox中生成一新图标,拖动图标至实例对话框中如下图
然后创建控件变量,创建后则会生产控件的.h,.cpp文件。
可根据.h中的接口函数使用控件。
5.对于.dll的COM控件注册
1)在开始菜单中点击运行进入命令行,输入dcomcnfg
2)组件服务——计算机——我的电脑——COM+应用程序——COM+ Dead Letter Queue Listener——组件(点击)
3)进入后,菜单——操作——新建——弹出对话框后“安装新组件”——选择路径
4)记下新组件的名字如下图“OphirLMMeasurement.ColMMeasurement.1”
6.在VC2008下使用.dll的COM控件
#import "C:\myctl.dll" no_namespace
使用:
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(OLESTR("OphirLMMeasurement.CoLMMeasurement.1"),&clsid);
CComPtr<ICoLMMeasurement> pMM;//智能指针
pMM.CoCreateInstance(clsid);
///中间使用接口函数
pMM->Open()
....
///
pMM.Release();
CoUninitialize();
7.相关类型转换
SAFEARRAY -> char*
VARIANT vTemp;
pMM->ScanUSB(&vTemp);
先把SAFEARRAY转换为BSTR类型
BSTR* buf;
SafeArrayAccessData(vTemp.parray, (void **)&buf);
再转为char*
char* lpszText2 = _com_util::ConvertBSTRToString(buf[0]);......
......
SysFreeString(buf[0]); // 用完释放
delete[] lpszText2;