zoukankan      html  css  js  c++  java
  • delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)

    在windows系统中,可以通过Regsvr32来实现注册ocx或者dl,

    编程时,调用Regsvr32来注册,却不能正常执行。尤其是在Win7系统中,需要管理员身份才能运行。

    使用下面的代码则能正常注册。

    [delphi] view plain copy
     
    1. //注册  
    2. function RegisterDllServer(FileName: string): boolean;  
    3. var  
    4.   nDllAddr: integer;  
    5.   bstr: string;  
    6.   ProcAddr: Pointer;  
    7.   str: PAnsiChar;  
    8. begin  
    9.   Result := False;  
    10.   if not FileExists(FileName) then  
    11.     exit;  
    12.       
    13.   nDllAddr:=LoadLibrary(PWideChar(FileName));  
    14.   if nDllAddr <> then  
    15.   begin  
    16.     bstr:='DllRegisterServer'+chr(0);  
    17.       
    18.     str := PAnsiChar(AnsiString(bstr));  
    19.     ProcAddr := GetProcAddress(nDllAddr,str);  
    20.     if ProcAddr<>nil then  
    21.     begin  
    22.       CallWindowProc(ProcAddr,nDllAddr,0,0,0);   
    23.       Result := True;  
    24.     end;  
    25.     FreeLibrary(nDllAddr);    
    26.   end;                       
    27. end;  
    28.    
    29.    
    30. //反注册  
    31. function UnRegisterDllServer(FileName: string): boolean;  
    32. var  
    33.   nDllAddr: integer;  
    34.   bstr: string;  
    35.   ProcAddr: Pointer;  
    36.   str: PAnsiChar;  
    37. begin  
    38.   Result := False;  
    39.     
    40.   if not FileExists(FileName) then  
    41.     exit;  
    42.       
    43.   nDllAddr:=LoadLibrary(PWideChar(FileName));  
    44.   if nDllAddr <> then  
    45.   begin  
    46.     bstr:='DllUnregisterServer'+chr(0);  
    47.       
    48.     str := PAnsiChar(AnsiString(bstr));  
    49.     ProcAddr := GetProcAddress(nDllAddr,str);  
    50.     if ProcAddr<>nil then  
    51.     begin  
    52.       CallWindowProc(ProcAddr,nDllAddr,0,0,0);  
    53.       Result := True;  
    54.     end;  
    55.     FreeLibrary(nDllAddr);    
    56.   end;                       
    57. end;  

    http://blog.csdn.net/shuaihj/article/details/6243360

    选择目录

    [delphi] view plain copy
     
      1. function selectdir: string; //如果取消取返回为空,否则返回选中的路径  
      2. var  
      3.   Info: TBrowseInfo;  
      4.   IDList: pItemIDList;  
      5.   Buffer: PChar;  
      6. begin  
      7.   result := '';  
      8.   Buffer := StrAlloc(MAX_PATH);  
      9.   with Info do  
      10.   begin  
      11.     hwndOwner := GetActiveWindow;   //少了这句,浏览目录选择框不会跳出来的  
      12.     pidlRoot := nil; //起始位置,缺省为我的电脑  
      13.     pszDisplayName := Buffer; //用于存放选择目录的指针  
      14.     lpszTitle := '请选择路径:'; //对话框提示信息  
      15.     ulFlags := BIF_RETURNONLYFSDIRS or BIF_BROWSEINCLUDEFILES;  
      16.      //选择参数,此处表示显示目录和文件,如果只显示目录则将后一个去掉即可  
      17.     lpfn := nil; //指定回调函数指针  
      18.     lParam := 0; //传递给回调函数参数  
      19.     IDList := SHBrowseForFolder(Info); //读取目录信息  
      20.   end;  
      21.   if IDList <> nil then  
      22.   begin  
      23.     SHGetPathFromIDList(IDList, Buffer); //将目录信息转化为路径字符串  
      24.     result := strpas(Buffer);  
      25.   end;  
      26.   StrDispose(buffer);  
      27. end;  

    http://blog.csdn.net/earbao/article/details/9296411

  • 相关阅读:
    xml转义字符在mybatis动态sql中的使用
    jdbc类型与java类型
    aop日志(记录方法调用日志)
    mysql数据库关联查询【lert join】常见使用
    maven项目基本配置
    mapper文件的参数传入与获取
    idea新建项目出现push rejected如何解决
    快速从2个List集合中找出相同/不同元素
    Windows 环境下安装RocketMQ
    RabbitMQ java客户端集成 Spring 开发环境
  • 原文地址:https://www.cnblogs.com/findumars/p/5338719.html
Copyright © 2011-2022 走看看