VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
OCX 控件注册

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

方法一:在DOSWindows命令行下运行:regsvr32 ocxname.OCX 注册

示例:

 regsvr32 netshare.ocx     //注册netshare.ocx控件

  regsvr32 /u netshare.ocx    //解除netshare.ocx控件的注册

如果netshare.ocx文件不在system目录时,还必须在文件名前加上完整的路径。除了regsvr32应用程序之外,Microsoft在它的Web站点上还提供了一个称为regclean.exe的程序,可以检查注册表并去掉丢失的组件在注册表中的条目。regclean.exe除了可以删除悬挂的条目,它还提供一个“undo”文件帮助恢复错误的删除。

regsvr32.exe注册ActiveX控件虽然简单,但需要用户手工进行注册,在不用时还需手工解除注册。

方法二:用Install Shield,在里面选“Self-Registered”,安装程序将自动注册


   方法三:
API函数注册

此方法的设计思路是:先将ActiveX控件载入内存,然后验证其有效性,最后直接在内存地址中执行其注册函数(DllRegisterServerUnDllregisterServer)。其编程方法是:

  1、使用Windows API函数LoadLibrary载入ActiveX控件;

        2、使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterserver)指针;

  3、使用CallWindowProc函数执行已载入内存的ActiveX控件注册函数(DllRegisterServerUnDllregisterServer)

示例:

typedef int (CALLBACK* MYFUNCTION)(void);

MYFUNCTION  MyFunction = NULL;

HINSTANCE handle = NULL ;

handle = LoadLibrary("TRDragDropTreeCtrl.ocx");

if( handle != NULL )

{

MyFunction = GetProcAddress(handle,"DllRegisterServer");

if( MyFunction != NULL )

{

MyFunction();

}

       }

小小经验:
1、有时候在程序中使用OCX控件时失效,检查一下调用之间是否执行了AfxOleInit()。如果使用了容器,还需要保证执行了AfxEnableControlContainer()
2、使用ActiveX Control Test Container可以很方便地测试制作出来的OCX控件(从开始菜单-》程序-》Microsoft Visual Studio 6.0 -> Microsoft Visual Studio 6.0 tools可以看到该工具)
3、有时候控件制作的没有问题,注册方式也对,但是注册的时候确失败了,可能时DLL的版本不对,使用Dependencies查看OCX控件依赖DLL是否跟现在使用的DLL版本一致



相关文章

相关软件