原帖:https://bbs.csdn.net/topics/392434614
自己写个名字叫做XCDZIP35.OCX的组件,把XCDZIP35.OCX的注册信息替换掉,我想问一下
1.旧XCDZIP35.OCX是不是得改名(能改名吗)
2.旧XCDZIP35.OCX的UUID是不是得改
3.新的XCDZIP35.OCX的UUID是不是应该跟未改动前的旧的XCDZIP35.OCX一样
自己写个名字叫做XCDZIP35.OCX的组件,把XCDZIP35.OCX的注册信息替换掉,我想问一下
1.旧XCDZIP35.OCX是不是得改名(能改名吗)
2.旧XCDZIP35.OCX的UUID是不是得改
3.新的XCDZIP35.OCX的UUID是不是应该跟未改动前的旧的XCDZIP35.OCX一样
解决方案 »
- C++中当遇到一个while循环形成死循环的问题?
- 怎么获取Static Text控件上的文件?
- GDI+如何在载入的图片上画图呢?
- 高手来啊---直接运行程序能加载SkinPlusPlus皮肤,网页调用不能加载
- 在VC中.为应用程序添加图形超链接功能
- 求Marching Cubes算法的VC实现源码
- 在编译中遇到 defaultlib "MSVCRT" conflicts with use of other libs 怎么解决??急!!!
- 請教:GetMessage是不是沒有取到消息就不返回???
- 谁能推荐几本讲COM编程例子的书?
- 关于类的static变量
- vs调试加载动态库出错,没有堆栈信息
- MFC连接ODBC数据源时出现"记录集只读"问题,还有就是提示“SNAPSHOT”仅对内存优化的表有效,无法预定义语句,怎么办?
如果是你写的, 那么你只为了记录调用ocx时的参数, 那这些参数肯定通过你程序的某个方法的, 你完全可以直接记录
但如果程序不是你写的, 你无法直接记录的话, 那你再做一个ocx做中转的作用就没什么用了, 我建议你还是去研究赵4的方法吧
旧ocx不是你写的, 你不能重新编译, 那就代表你无法改变它的 uuid
ocx的调用是根据类名去注册表查询ocx的信息, 如果你把旧ocx的信息替换成你新的ocx, 那么程序能调用你的ocx
但问题是你的新ocx是根据旧ocx的信息去加载旧ocx的, 而旧ocx的注册信息已经替换成新ocx的信息了, 那你猜猜会发生什么事情
确实都不是我写的,是感觉有点复杂,我也查了一下,旧OCX无法改变其UUID,所以新OCX调用旧OCX可能导致新OCX起不到中间作用
1.把旧的XXXX.ocx修改文件名,然后注册了,不告诉别人你是用这个控件,别人就不知道了
2.自己编写一个新的ocx控件,然后在这个控件内部的窗口OnCreate消息中自己建立这个控件对象,显示在新的控件的窗口区中
3.给新的ocx控件建立一些方法和消息,实际就是转发旧的ocx控件的方法和消息,当然你可以稍微修改一下函数参数等
WinAPIOverride64
以管理员身份运行
……
AddRef
Release
InterfaceA_Method_1
InterfaceA_Method_2
...
InterfaceA_Method_N
In this case we have pInterfaceA==pIUnknown
If an interface B is derived from IDispatch we have pInterfaceB QueryInterface
AddRef
Release
GetTypeInfoCount
GetTypeInfo
GetIDsOfNames
Invoke
InterfaceB_Method_1
InterfaceB_Method_2
...
InterfaceB_Method_N
In this case we have pInterfaceB==pIUnknown==pIDispatch WinAPIOverride对OCX的文件结构分析,但各部分的大小怎么算
简单概括:抢先注册类厂。
工作原理是自己有代码在主进程中执行,自己写的代码好说,别人的二进制应用就下钩子,然后预先加载自己的组件,保证在请求原组件之前加载即可。在我的组件被加载时,由组件自己注册同CLSID的类厂,剩下的事情就不用考虑了,系统创建组件会直接使用你注册的类厂,而不是读注册表寻找原组件。这种方式的应用非常简单成熟,早期我把V8脚本引擎封装成符合ms的脚本规范,然后使用IE控件,启动的脚本引擎是我的封装库,而不是jscript.dll,就是想跟IE自带的脚本引擎做一个性能对比。