当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 请问能用c#写客户端吗?,如事件 ......
 ·一个问题    »显示摘要«
    摘要: 有如下的代码: static void run(attribute attribs) { lastmodifiedattribute lastmodifiedattribs=attribs as lastmodifiedattribute; 上面的as关键字如何理解 ......


如何注册一个dll大伙帮帮忙,up有分…

我用delphi写了一个dll,需要注册,但不知道如何用程序来注册这个dll,还请各位帮帮忙,另外最好不要用   shellexecute   调用系统的   regsvr32.exe程序,因为这个会有个注册成功或失败的对话框,如果能屏蔽这个提示对话框,那也可以,谢谢各位先了。

NO.1   作者: net205

1.ShellExecute(handle,   nil,   regsvr32.exe/s,   *.dll,   nil,   SW_HIDE);  
  2.用LoadLibrary装载.

NO.2   作者: cgh1970

up

NO.3   作者: tpmao

在命令提示符下直接输入:regsvr32,然后有帮助的!  
  在命令提示符下直接输入:regsvr32,然后有帮助的!  
  在命令提示符下直接输入:regsvr32,然后有帮助的!  
  在命令提示符下直接输入:regsvr32,然后有帮助的!  
  在命令提示符下直接输入:regsvr32,然后有帮助的!  
 

NO.4   作者: rabbit34

路过,学写DLL中  
  多多指教

NO.5   作者: wm8033

up

NO.6   作者: lyhold

regsvr32.exe

NO.7   作者: tpmao

regsvr32.exe

NO.8   作者: Zhymax

regsvr32.exe  
 

NO.9   作者: firetoucher

来晚了,up一下。

NO.10   作者: zhoutian618

UP

NO.11   作者: lanren_me

可以用代码在程序中实现COM的注册.   举例如下:    
  (假设需要注册的文件为test.ocx)  
  uses   OLEctl,....  
  var  
  OCXHand:   THandle;  
  RegFunc:   TDllRegisterServer;  
  begin  
  OCXHand:=   LoadLibrary(c:\windows\system\test.ocx);  
  RegFunc:=   GetProcAddress(OCXHand,   DllRegisterServer);    
  if   RegFunc   <>   0   then   ShowMessage(Error!);  
  FreeLibrary(OCXHand);  
  end;  
   
   
  olectl.pas在\source\rtl\win下.  
  ///////////////////////  
  在用DELPHI编写程序时,充分利用他人的成果无疑是一条捷径。我们用的控件有的是带源码的PAS文件,有的是DCU/OBJ文件;而OLE/COM控件也是不可缺少的,由于OLE/COM控件不仅可以由DELPHI开发,还可由VB、VC、PB等其它编程语言开发,因而它可以使我们的DELPHI应用程序功能更为强大,例如用一个MP3播放控件我们就可以编写自己的MP3播放程序,  
   
  用ADO对象我们的数据库程序就可能不再依赖BDE。  
   
    不过OLE/COM控件是需要首先注册才能使用的。通常使用OLE/COM控件,首先需要用WINDOWS自己提供的注册程序RegSvr32.EXE来注册或卸载,如“RegSvr32.EXE   Mp3Play.OCX”或  
   
  “RegSvr32.EXE   Mp3Play.OCX   /u”。不过如果要求我们的软件用户自己来注册OLE/COM控件,那可不是一个好主意,因为我们完全可以自己在程序中注册OLE/COM控件的。下面将讨论如何在DELPHI程序中注册最为常见的DLL/OCX类型的OLE/COM控件。  
   
   
  一、注册OLE/COM控件的原理  
   
    在标准OLE/COM控件中,有两个函数DllRegisterServer、DllUnregisterServer可调用,其中  
   
  DllRegisterServer函数用于注册OLE/COM控件,DllUnregisterServer用于卸载OLE/COM控件,两个函数的原型均为:function   :   HResult。我们可用LoadLibrary装载DLL/OCX文件,用GetProcAddress获取DllRegisterServer和DllUnregisterServer两个函数的指针,然后再直接运行这两个函数即可实现注册和卸载OLE/COM控件的操作,从而代替WINDOWS系统的RegSvr32.exe实现OLE/COM控件的注册和卸载。  
   
   
  二、实现过程  
   
    上面的原理很简单,实现起来也就不难了,前提是必须熟悉动态加载DLL函数的过程。具体的实现  
   
  过程我们可以通过下面的程序代码及注释来理解。  
   
  {   注册一个DLL形式或OCX形式的OLE/COM控件  
   
  参数strOleFileName为一个DLL或OCX文件名,  
   
  参数OleAction表示注册操作类型,1表示注册,0表示卸载  
   
  返回值True表示操作执行成功,False表示操作执行失败  
   
  }  
   
  function   RegisterOleFile   (strOleFileName   :   STRING;   OleAction   :   Byte   )   :   BOOLEAN;  
   
  const  
   
  RegisterOle   =   1;//注册  
   
  UnRegisterOle   =   0;//卸载  
   
  type  
   
  TOleRegisterFunction   =   function   :   HResult;//注册或卸载函数的原型  
   
  var  
   
  hLibraryHandle   :   THandle;//由LoadLibrary返回的DLL或OCX句柄  
   
  hFunctionAddress:   TFarProc;//DLL或OCX中的函数句柄,由GetProcAddress返回  
   
  RegFunction   :   TOleRegisterFunction;//注册或卸载函数指针  
   
  begin  
   
  Result   :=   FALSE;  
   
  //打开OLE/DCOM文件,返回的DLL或OCX句柄  
   
  hLibraryHandle   :=   LoadLibrary(PCHAR(strOleFileName));  
   
  if   (hLibraryHandle   >   0)   then//DLL或OCX句柄正确  
   
  try  
   
  //返回注册或卸载函数的指针  
   
  if   (OleAction   =   RegisterOle)   then//返回注册函数的指针  
   
  hFunctionAddress   :=   GetProcAddress(hLibraryHandle,   pchar(DllRegisterServer))  
   
  else//返回卸载函数的指针  
   
  hFunctionAddress   :=   GetProcAddress(hLibraryHandle,   pchar(DllUnregisterServer));  
   
  if   (hFunctionAddress   <>   NIL)   then//注册或卸载函数存在  
   
  begin  
   
  RegFunction   :=   TOleRegisterFunction(hFunctionAddress);//获取操作函数的指针  
   
  if   RegFunction   >=   0   then   //执行注册或卸载操作,返回值>=0表示执行成功  
   
  result   :=   true;  
   
  end;  
   
  finally  
   
  FreeLibrary(hLibraryHandle);//关闭已打开的OLE/DCOM文件  
   
  end;  
   
  end;  
   
   
  三、应用举例  
   
    在我们的应用例子中,OpenDialog1用于选择一个DLL/COM文件,editOleFileName用于保存DLL/COM文件名称,radiogroupOleAction用于选择操作类型,memo1用来显示操作成功或失败的信息。具体的例子还是看程序源码吧。  
   
   
  //选择一个DLL/COM文件  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
   
  begin  
   
  if   OpenDialog1.execute   then   //指定一个DLL/COM文件  
   
  editOleFileName.text   :=   OpenDialog1.FileName   ;  
   
  end;  
   
   
  //注册一个DLL形式或OCX形式的OLE/COM控件  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
   
  begin  
   
  if   editOleFileName.text   =     then   exit;//没有指定文件名则不予处理  
   
  if   RegisterOleFile(   editOleFileName.text,   radiogroupOleAction.ItemIndex   )  
   
  then//操作成功  
   
  memo1.lines.add(   DatetimeToStr(   now   )   +   ----+   editOleFileName.text  
   
  +   radiogroupOleAction.Items[   radiogroupOleAction.ItemIndex   ]   +   成功!   )  
   
  else//操作失败  
   
  memo1.lines.add(   DatetimeToStr(   now   )   +   ----+   editOleFileName.text  
   
  +   radiogroupOleAction.Items[   radiogroupOleAction.ItemIndex   ]   +   失败!   );  
   
  end;  
   
   
    把注册OLE/COM控件功能作成一个OLE/COM或一般的DLL供其它程序调用,可以使其它应用程序也具有注册OLE/COM控件的功能。  
   
  g


 ·suse linux 8.2 哪儿可以下载的到    »显示摘要«
    摘要: 提供一下suse linux 8.2 的好的下载地点? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE