chenronting 发表于 2013-7-30 12:32:36

【已解决】关于一个OCX文件的调用,有人说是建立Object

本帖最后由 chenronting 于 2013-8-2 10:49 编辑

大家好,目前,我手上有一个OCX文件, 声明了全局函数,可以外部调用,下面是其中的两个函数:
1.初始化串口函数
Public Function FunctionInitComm(ByVal port As Byte) As Boolean
功能:打开Port串口
入口:Port端口号 1~16
出口:true    成功
         false   失败

2.关闭串口函数
Public Function FunctionCloseComm()
功能:关闭打开的串口

下面是我自己按论坛里的例子写出来的,运行时判断出没有建立Object
Dim $Ocx=ObjCreate("Reader.ocx")
If Not IsObj($Ocx) Then
        MsgBox(0,0,"没有对象");未注册的容错处理。测试时已确定注册。
EndIf
$a=$Ocx.FunctionInitComm(1)
$Ocx.functionclosecomm()

不好意思,现在附上 Reader.ocx
下载后请修改,去掉Au3后缀
请大家帮帮我,感谢之至!!

下面是坛友阿婆教会我的方法,在这里分享于各位需要的看官。
也感谢阿婆的帮助,为之头疼时,他的出现与帮助,无异于一道天光。嘿嘿~入正题:

首先你要注册控件(复制到System32再regsvr32.exe)
打开注册表,搜索你注册的控件名,在 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\ 下面
如,我这个文件注册后,内里内容如下
Windows Registry Editor Version 5.00

@="MyCpuReaderOcx.CpuCardReader"

@=""






@="C:\\windows\\system32\\cpureader.ocx"
"ThreadingModel"="Apartment"

@="0"

@="131473"

@="MyCpuReaderOcx.CpuCardReader"

@="C:\\windows\\system32\\cpureader.ocx, 30000"

@="{B51FFB27-E56B-4577-98E3-78F5BE6A8DA7}"

@="1.0"

可以一眼看到第三行与第十九行中出现了熟悉的格式 MyCpuReaderOcx.CpuCardReader
这个就是你使用 Object 注册的名称,其中已第十九行的名称为准

如果你不知道控件内里的使用方法,Autoit 也有给你准备了工具,只是不多的人发现了(我开始也没发现,感谢阿婆传授神功~~)
打开 Autoit 工具箱 ,右键之,点开菜单 程序扩展工具--OLE程序查看器
出来一个软件,点击 File -- View TypeLib,再选择你要查看的控件即可

注意,以上方法适用但不限于 OCX (这里我只测试了OCX,其他如DLL 等的使用方法会有所异差)

ebhb 发表于 2013-7-30 22:59:58

要先用service32注册

chenronting 发表于 2013-8-1 21:36:11

回复 2# ebhb


    谢谢你, 问题我已经解决了,等下把方法共享之。

cihron 发表于 2019-7-18 01:10:12

今天做了个相似的测试,总是提示控件未注册。

最后发现是版本的问题,即32位OCX必须用32位程序调用。

在文件头部加:#PRE_UseX64=n 后问题顺利解决。

其它编程工具亦存在此类问题,使用时注意。
页: [1]
查看完整版本: 【已解决】关于一个OCX文件的调用,有人说是建立Object