在VC的Activex控件开发中注意idl文件中的4个GUID,是分别标识和区分别的Activex控件的标识
其中4个GUID在*Ctrl.cpp和*.cpp文件中又分别会再出现一次。如下图:
1 // HIKActivex.idl : ActiveX 控件项目的类型库源。 2 3 // 此文件将由 MIDL 编译器工具处理以 4 // 产生类型库(HIKActivex.tlb),该类型库将成为 5 // HIKActivex.ocx. 6 7 #include <olectl.h> 8 #include <idispids.h> 9 10 [ uuid(375327E5-66A3-440E-89C8-636DEBF47CA8), version(1.0), 11 control ] 12 library HIKActivexLib 13 { 14 importlib(STDOLE_TLB); 15 16 // CHIKActivexCtrl 的主调度接口 17 [ 18 uuid(12E6718F-545D-4D00-AA3A-46E3D716CD2B) 19 ] 20 dispinterface _DHIKActivex 21 { 22 properties: 23 methods: 24 [id(1), helpstring("注册用户到监控设备")] LONG IPNC_Login(BSTR strDVRIP, LONG iDVRPort, BSTR strUserName, BSTR strPwd, LONG iWaitTime, LONG* iError); 25 [id(2), helpstring("初始化监控设备")] VARIANT_BOOL IPNC_Init(void); 26 [id(3), helpstring("注销设备用户")] VARIANT_BOOL IPNC_Logout(void); 27 [id(4), helpstring("启动实时监视")] LONG IPNC_RealPlay(LONG iChan); 28 [id(5), helpstring("停止实时监视")] LONG IPNC_RealStop(void); 29 [id(6), helpstring("设置码流(0,主码流;1,子码流)")] void IPNC_SetBitStream(LONG iBitStreamType); 30 [id(9), helpstring("返回摄像头参数值")] void IPNC_GetDevConfig(LONG* iBright, LONG* iContrast, LONG* iSaturation, LONG* iSharpness); 31 [id(10), helpstring("设置摄像头参数")] VARIANT_BOOL IPNC_SetDevConfig(LONG iBright, LONG iContrast, LONG iSaturation, LONG iSharpness); 32 }; 33 34 // CHIKActivexCtrl 的事件调度接口 35 36 [ 37 uuid(D56BD0F4-0107-4011-9168-0DBA557F4CA4) 38 ] 39 dispinterface _DHIKActivexEvents 40 { 41 properties: 42 // 事件接口没有任何属性 43 44 methods: 45 [id(1)] void ClickSel(LONG xCoordinate, LONG yCoordinate); 46 [id(3)] void RClickUp(LONG xCoordinate, LONG yCoordinate); 47 [id(5)] void FullScreen(LONG x, LONG y); 48 }; 49 50 // CHIKActivexCtrl 的类信息 51 [ 52 uuid(729ACD9B-4D64-4A39-AE23-4BAEC1D7B782) 53 ] 54 coclass HIKActivex 55 { 56 [default] dispinterface _DHIKActivex; 57 [default, source] dispinterface _DHIKActivexEvents; 58 }; 59 60 };
*Ctrl.cpp
1 // 初始化类工厂和 guid 2 3 IMPLEMENT_OLECREATE_EX(CHIKActivexCtrl, "HIKACTIVEX.HIKActivexCtrl.1", 4 0x729acd9b, 0x4d64, 0x4a39, 0xae, 0x23, 0x4b, 0xae, 0xc1, 0xd7, 0xb7, 0x82) 5 6 7 8 // 键入库 ID 和版本 9 10 IMPLEMENT_OLETYPELIB(CHIKActivexCtrl, _tlid, _wVerMajor, _wVerMinor) 11 12 13 14 // 接口 ID 15 16 const IID IID_DHIKActivex = { 0x12E6718F, 0x545D, 0x4D00, { 0xAA, 0x3A, 0x46, 0xE3, 0xD7, 0x16, 0xCD, 0x2B } }; 17 const IID IID_DHIKActivexEvents = { 0xD56BD0F4, 0x107, 0x4011, { 0x91, 0x68, 0xD, 0xBA, 0x55, 0x7F, 0x4C, 0xA4 } };
*.cpp
1 CHIKActivexApp theApp; 2 3 const GUID CDECL _tlid = { 0x375327E5, 0x66A3, 0x440E, { 0x89, 0xC8, 0x63, 0x6D, 0xEB, 0xF4, 0x7C, 0xA8 } }; 4 const WORD _wVerMajor = 1; 5 const WORD _wVerMinor = 0;