设计思路:先将ActiveX控件载入内存,然后验证其有效性,最后直接在内存地址中执行其注册函数DllRegisterServer,UnDllRegisterServer
其编程方法:
1.使用Windows API函数LoadLibrary载入ActiveX控件
2.使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为UnDllRegisterServer)指针
3.使用CallWindowProc函数执行已载入内存的ActiveX控件注册函数(DllRegisterServer,UnDllRegisterServer)
示例
typedef int (CALLBACK* MYFUNTION)(void)
MYFUCTION MyFunction=NULL;
HINSTANCE handle=null;
handle=LoadLibrary("***.ocx");
if(handle1=NULL)
{
MyFunction=GetProAddress(handle,"DllRegisterServer");
if(MyFunction!=NULL)
{MyFunction();}
}
小小经验:
1.有时候在程序中使用ocx控件时 失效,检查一下调用之间是否执行了AfxOleInit(),如果使用了容器,还需要保证执行了AfxEnableControlContainer()
2.使用ActiveX Control Test Container 可以很方便地测试制作的ocx控件
3.有时候控件制作的没有问题,注册方式也对,但是注册的时候却失败了,可能是DLL的版本不对,使用Dependences查看ocx控件依赖dll是否跟现在使用的dll版本一致