找回密码
 加入
搜索
查看: 5626|回复: 3

[系统综合] 【已解决】关于一个OCX文件的调用,有人说是建立Object

[复制链接]
发表于 2013-7-30 12:32:36 | 显示全部楼层 |阅读模式
本帖最后由 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  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}] 
@="MyCpuReaderOcx.CpuCardReader" 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\Control]
@=""  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\Implemented Categories]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\Implemented Categories\{0DE86A52-2BAA-11CF-A229-00AA003D7352}] 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\Implemented Categories\{0DE86A53-2BAA-11CF-A229-00AA003D7352}] 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\Implemented Categories\{0DE86A57-2BAA-11CF-A229-00AA003D7352}]  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\Implemented Categories\{40FC6ED4-2438-11CF-A3DB-080036F12502}]  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\InprocServer32] 
@="C:\\windows\\system32\\cpureader.ocx" 
"ThreadingModel"="Apartment" 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\MiscStatus]
@="0"  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\MiscStatus\1]
@="131473"  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\ProgID]
@="MyCpuReaderOcx.CpuCardReader"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\ToolboxBitmap32]
@="C:\\windows\\system32\\cpureader.ocx, 30000"  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\TypeLib]
@="{B51FFB27-E56B-4577-98E3-78F5BE6A8DA7}"  
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EA32C66F-032B-467C-98D0-4DA2F032B7D0}\VERSION]
@="1.0"


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

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-7-30 22:59:58 | 显示全部楼层
要先用service32注册
 楼主| 发表于 2013-8-1 21:36:11 | 显示全部楼层
回复 2# ebhb


    谢谢你, 问题我已经解决了,等下把方法共享之。
发表于 2019-7-18 01:10:12 | 显示全部楼层
今天做了个相似的测试,总是提示控件未注册。

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

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

其它编程工具亦存在此类问题,使用时注意。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 23:21 , Processed in 0.087498 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表