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

  • 相关阅读:
    Ubuntu mongodb 安装和配置
    最基本的SQL语法/语句
    Sphinx学习之sphinx的安装篇
    六关节机器人的雅可比矩阵及微分运算
    六关节机器人的逆运动学计算
    六关节机器人的正运动学计算
    六关节机器人末端的微分运动
    Python3 升级pip
    一般多项式曲线的最小二乘回归(Linear Regression)
    关于卡尔曼滤波(Kalman Filter)的很好讲解
  • 原文地址:https://www.cnblogs.com/findumars/p/5338719.html
Copyright © 2011-2022 走看看