首页
社区
课程
招聘
[求助]如何找出VB编译的程序用到了哪些OCX控件?
发表于: 2008-12-14 18:33 3964

[求助]如何找出VB编译的程序用到了哪些OCX控件?

2008-12-14 18:33
3964
我看到一个VB做的程序“系统加速精灵”,发现它的界面上有一个XP风格的Tab控件很不错。

于是我就想把这个控件的OCX文件找出来,这样以后可以用在自己的程序里了。

可是我翻遍了安装目录也找不到。

请大家帮帮忙。

有什么方法可以从VB编译的EXE文件里看出它都用到了哪些OCX控件吗?

谢谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
做过COM编程的应该知道呀,下断点QueryInterface试试。
2008-12-14 19:00
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
确实没怎么做过COM的编程呀,我只懂得如何在VB中用现成的OCX控件。

刚才我bp QueryInterface,结果是“未知的标示附”。

我查了MSDN,发现这个函数是这样解释的:

Platform SDK: COM
IUnknown::QueryInterface

前面加了一个IUnknown::,不知道是何意?

好像是说QueryInterface不是一个API,所以没办法下断点吧。

不知道我的理解对不对。请书呆彭指点。
2008-12-14 19:47
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
我说错了,应该是CoCreateInstance()或者CoCreateInstanceEx()函数。

使用COM组件一般是用这两个函数之一来创建一个组件对象并返回它的接口的。

在函数下断点,从堆栈中找到组件的CLSID,然后就可以查到组件是哪个文件中实现的了。
2008-12-14 20:46
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
我断到CoCreateInstanceEx函数了,堆栈信息如下。

可是我不明白怎么从这里看到CLSID,据说CLSID不是“{xxxxx-xxxxx}”这样的形式吗?

0013F630   769AFAF7  返回到 ole32.769AFAF7 来自 ole32.CoCreateInstanceEx
0013F634   0013F6A8
0013F638   00000000
0013F63C   00000005
0013F640   00000000
0013F644   00000001
0013F648   0013F650
0013F64C   0013F7B4
0013F650   6601A0F0  MSVBVM60.6601A0F0

堆栈里似乎没有这个啊,我想了很久都没弄明白。

请书呆彭指点。
2008-12-14 22:31
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
你查一下CoCreateInstanceEx函数的参数说明。

第一个参数是CLSID的引用。

CLSID是一个结构体,一般C++编译器引用是通过指针或类似的方式实现的。
2008-12-14 22:56
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
根据

0013F630   769AFAF7  返回到 ole32.769AFAF7 来自 ole32.CoCreateInstanceEx
0013F634   0013F6A8
0013F638   00000000
0013F63C   00000005
0013F640   00000000
0013F644   00000001
0013F648   0013F650

第一个参数应该是红色那里吧,于是我查了0013F6A8处的堆栈,发现是0BE35203,

为了防止第一个参数是蓝色那行,我又看了0013F650处的堆栈,发现是00000000。

这下彻底未果了。
2008-12-15 00:15
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
还是不甘心啊,一件事情就这么完了。

书呆彭,帮帮我。
2008-12-15 19:43
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
9
正常情况下,第一个参数是个指针,指向一个GUID结构。

关于GUID的定义,相关头文件中是这样定义的:

typedef struct _GUID
{
  DWORD Data1;
  WORD Data2;
  WORD Data3;
  BYTE Data4[8];
} GUID;

我没用过VB,我只知道在VC中一般是通过(直接或通过MFC间接地)调用底层的CoCreateInstance()或CoCreateInstanceEx()API来获取要调用的组件的接口的。

但我猜测VB也应该是这么实现的。
2008-12-15 19:54
0
游客
登录 | 注册 方可回帖
返回
//