|
发表于 2019-3-23 13:47:31
|
显示全部楼层
福建省厦门市
.版本 2 .子程序 创建COM, 逻辑型, 公开 .参数 com组件路径, 文本型, , \APlayer.dll .参数 父窗口句柄, 整数型 .参数 左边, 整数型 .参数 顶边, 整数型 .参数 宽度, 整数型 .参数 高度, 整数型 .参数 边框类型, 整数型, 可空, 0,无边框;1,凹入式;2,凸出式;3,浅凹入式;4,镜框式;5,单线边框式 .参数 CLSID, 文本型, 参考 可空, COM组件的实现类TKIND_COCLASS_5的UUID(GUID) .参数 IID, 文本型, 参考 可空, COM组件的被实现类(控件)TKIND_DISPATCH_4的UUID(GUID) .局部变量 局地址, 整数型 .局部变量 rclsid, 字节集 .局部变量 局字节集, 字节集 .局部变量 局句柄, 整数型 .局部变量 局类厂地址, 整数型 .如果 (是否为空 (CLSID) = 真) m_CLSID = “{A9332148-C691-4B9D-91FC-B9C461DBE9DD}” .否则 m_CLSID = CLSID .如果结束 .如果 (是否为空 (IID) = 真) m_IID = “{F19169FA-7EB8-45EB-8800-0D1F7C88F553}” .否则 m_IID = IID .如果结束 ' AtlAxWinInit 初始化控件宿主代码(atl71.dll) ' AtlAxWinTerm 取消初始化控件宿主代码(atl71.dll) 局句柄 = LoadLibrary (“atl.dll”) .如果真 (局句柄 = 0) 局句柄 = LoadLibrary (“atl71.dll”) .如果真结束 局地址 = GetProcAddress (局句柄, “AtlAxWinInit”) .如果真 (局地址 = 0) FreeLibrary (局句柄) 信息框 (“AtlAxWinInit失败”, 0, ) 返回 (假) .如果真结束 ' 置入代码 ({ 255, 85, 252 }) ' _asm:call dword[ebp-4] 置入代码 ({ 255, 85, 248 }) ' call dwore [ebp-8] FreeLibrary (局句柄) CoInitialize (0) 局句柄 = CoLoadLibrary (A2W (com组件路径), 1) 局地址 = GetProcAddress (局句柄, “DllGetClassObject”) .如果真 (局地址 = 0) 信息框 (“com组件DllGetClassObject失败”, 0, ) FreeLibrary (局句柄) 返回 (假) .如果真结束 局字节集 = { 1, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70 } ' IID_IClassFactory rclsid = 取空白字节集 (16) CLSIDFromString (A2W (m_CLSID), rclsid) 局句柄 = DllGetClassObject_ (局地址, rclsid, 局字节集, 局类厂地址) ' IUnknown指针的指针 ' FreeLibrary (局句柄)'不能freelibrary,还在使用啊. .如果真 (局句柄 ≠ 0) FreeLibrary (局句柄) 信息框 (“创建类厂失败:” + 取十六进制文本 (局句柄), 0, ) 返回 (假) .如果真结束 CLSIDFromString (A2W (m_IID), rclsid) 局句柄 = CreateInstance (局类厂地址, 0, rclsid, IUnknown指针_对象 (成员_对象)) Release (局类厂地址) .判断开始 (局句柄 < 0) 信息框 (“CreateInstance创建对象失败,可以尝试zc此路径下的控件再试,错误码:” + 取十六进制文本 (局句柄), 0, ) 返回 (假) .默认 返回 (附加窗口 (父窗口句柄, 左边, 顶边, 宽度, 高度, 边框类型) ≠ 0) |
|