使用命令行注册和反注册OPC 服务器的实现方法

使用命令行注册和反注册OPC 服务器的实现方法

Method of Registering and Unregistering OPC Server by Command Line

作者:詹根基 陈冲 Mail:zhan826@hotmail.com

 

【内容摘要】本文通过一个具体的事例,讲述如何通过命令行注册及反注册OPC服务器程序,并给出了Visual C++程序代码,希望能给初学者对注册和反注册OPC服务器提供一个本质的理解,对于其它组件程序注册的原理也是相通的。

一、              前言

基于COM(组件对象模型 )的组件程序是服务器程序(OPC服务器实际上就是一种工业上使用的COM组件),以EXE或者DLL的形式提供给客户程序使用。普通的DLL程序如果通过LoadLibrary函数显式加载,需要给定DLL的路径和名称;而组件程序的路径对于客户程序来说是透明的,客户程序只要通过组件程序的ProgID来加载组件程序即可。客户程序在调用组件程序的时候,首先要通过注册表查询到组件程序的路径并进行加载,所以组件程序一定会实现把自己的信息写到注册表的功能,这些信息主要包括CLSIDProgID、程序的路径等。在使用组件之前一定会首先把这些信息写到注册表里。

PC上,对于注册DLL组件程序可以使用RegSvr32命令来注册组件程序,组件程序一定要实现DllRegisterServer这个API函数,具体如图-1所示:

-1

而对于EXE组件程序可以在命令行中输入组件的路径和名称后,加上RegServer参数,如图-2所示:

-2

当然用户还可以通过编写一个Reg文件,然后执行该文件也可以实现注册组件的功能,对于EXE组件可以运行它,然后再注册。本文着重讲述图-1和图-2的实现方法。

二、DLL组件的注册与反注册

  目前,在Window CE平台上开发OPC服务器程序一定是做成DLL的组件,也就是进程内组件。需要注意的是,在该平台上是使用RegSvrCE命令来实现注册组件程序的;RegisterServer函数就是实现写注册表的功能。

extern "C" HRESULT __stdcall DllRegisterServer()

{

CString  HelpPath;

int i;

HelpPath = AfxGetApp()->m_pszHelpFilePath;

i = HelpPath.ReverseFind(_T('//'));

HelpPath = HelpPath.Left(i+1);

HelpPath += _T("OPCRTDB.dll");

return RegisterServer(CLSID_OPCRTDB,// Class ID

                      HelpPath, // DLL路径

                                                 _T("RTDBOPC.Svr.1"),//ProID

                                                 _T("This is a read time database based on OPC!"),// Description String

                                                 _T("Developed by zhan genji")

                                                 );// optional

                                                

}

  反注册其实就是执行删除注册表的动作,在DLL里要实现DllUnregisterServer这个API函数。在命令行中执行RegSvr32 /u在加具体的DLL路径和名称就会调用DllUnregisterServer这个API函数,实现反注册。

extern "C" HRESULT __stdcall DllUnregisterServer()

{

return UnregisterServer(CLSID_Dictionary,

                        " RTDBOPC.Svr.1",NULL);

}

 

三、EXE组件的注册与反注册

BOOL CHurcoOPCSvrApp::InitInstance()里实现如下代码:

         TCHAR    szTokens[] = _T("-/");

         CString HelpPath;

         CString     SvrName, SvrDescrip;

         int     i;

 

         HelpPath = AfxGetApp()->m_pszHelpFilePath;

         i = HelpPath.ReverseFind('//');

         HelpPath = HelpPath.Left(i+1);

         HelpPath += "HurcoOPCSvr.exe";  

          

         SvrName = "Hurco.OPCServer";

         SvrDescrip = "Hurco Software OPC Server ";

 

         CString tempCmdLine(m_lpCmdLine);

         LPTSTR lpszToken = _tcstok(tempCmdLine.GetBuffer(1), szTokens);

         while (lpszToken != NULL)

                   {

                   if (_tcsicmp(lpszToken, _T("UnregServer"))==0)//反注册

                            {

                            UnregisterServer ((BYTE *)&CLSID_Hurco, SvrName);//删除注册表

                            return (FALSE);

                            }

                   else if (_tcsicmp(lpszToken, _T("RegServer"))==0)//注册

                            {

       //写入到注册表

                            UpdateRegistry ((BYTE *)& CLSID_Hurco,SvrName,SvrDescrip,HelpPath);

                            return (FALSE);

                            }

                   lpszToken = _tcstok(NULL, szTokens);

}

在命令行中输入组件的路径和名称后,加上UnregServer参数就可以实现Exe组件的反注册。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值