delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)
在windows系统中,可以通过Regsvr32来实现注册ocx或者dl,
编程时,调用Regsvr32来注册,却不能正常执行。尤其是在Win7系统中,需要管理员身份才能运行。
使用下面的代码则能正常注册。
- //注册
- function RegisterDllServer(FileName: string): boolean;
- var
- nDllAddr: integer;
- bstr: string;
- ProcAddr: Pointer;
- str: PAnsiChar;
- begin
- Result := False;
- if not FileExists(FileName) then
- exit;
- nDllAddr:=LoadLibrary(PWideChar(FileName));
- if nDllAddr <> 0 then
- begin
- bstr:='DllRegisterServer'+chr(0);
- str := PAnsiChar(AnsiString(bstr));
- ProcAddr := GetProcAddress(nDllAddr,str);
- if ProcAddr<>nil then
- begin
- CallWindowProc(ProcAddr,nDllAddr,0,0,0);
- Result := True;
- end;
- FreeLibrary(nDllAddr);
- end;
- end;
- //反注册
- function UnRegisterDllServer(FileName: string): boolean;
- var
- nDllAddr: integer;
- bstr: string;
- ProcAddr: Pointer;
- str: PAnsiChar;
- begin
- Result := False;
- if not FileExists(FileName) then
- exit;
- nDllAddr:=LoadLibrary(PWideChar(FileName));
- if nDllAddr <> 0 then
- begin
- bstr:='DllUnregisterServer'+chr(0);
- str := PAnsiChar(AnsiString(bstr));
- ProcAddr := GetProcAddress(nDllAddr,str);
- if ProcAddr<>nil then
- begin
- CallWindowProc(ProcAddr,nDllAddr,0,0,0);
- Result := True;
- end;
- FreeLibrary(nDllAddr);
- end;
- end;
http://blog.csdn.net/shuaihj/article/details/6243360
选择目录
- function selectdir: string; //如果取消取返回为空,否则返回选中的路径
- var
- Info: TBrowseInfo;
- IDList: pItemIDList;
- Buffer: PChar;
- begin
- result := '';
- Buffer := StrAlloc(MAX_PATH);
- with Info do
- begin
- hwndOwner := GetActiveWindow; //少了这句,浏览目录选择框不会跳出来的
- pidlRoot := nil; //起始位置,缺省为我的电脑
- pszDisplayName := Buffer; //用于存放选择目录的指针
- lpszTitle := '请选择路径:'; //对话框提示信息
- ulFlags := BIF_RETURNONLYFSDIRS or BIF_BROWSEINCLUDEFILES;
- //选择参数,此处表示显示目录和文件,如果只显示目录则将后一个去掉即可
- lpfn := nil; //指定回调函数指针
- lParam := 0; //传递给回调函数参数
- IDList := SHBrowseForFolder(Info); //读取目录信息
- end;
- if IDList <> nil then
- begin
- SHGetPathFromIDList(IDList, Buffer); //将目录信息转化为路径字符串
- result := strpas(Buffer);
- end;
- StrDispose(buffer);
- end;
http://blog.csdn.net/earbao/article/details/9296411
delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)的更多相关文章
- windows7 64位下运行 regsvr32 注册ocx或者dll的方法
来源:转载 it won't work for you unless you have some form of Visual Basic tools loaded on your system: ...
- VC++如何在程序中用代码注册和卸载ocx控件(代码)
方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例:regsvr32 netshare.ocx //注册netshare.ocx控件regsvr ...
- Activex、OLE、COM、OCX、DLL之间区别、联系[转]
转自:http://baike.baidu.com/view/393671.htm 创建COM:http://blog.csdn.net/henry000/article/details/700839 ...
- Activex、OLE、COM、OCX、DLL之间的区别(转)
熟悉面向对象编程和网络编程的人一定对ActiveX.OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,对许多们还是比较模糊的.在具体介绍它们的关系之间,我们还是先明确组件(Co ...
- Activex、OLE、COM、OCX、DLL之间有什么区别?
来源:http://www.blogjava.net/Jack2007/archive/2008/04/27/196392.html 熟悉面向对象编程和网络编程的人一定对ActiveX ...
- 【转载】OCX和DLL的区别
原文:http://blog.csdn.net/scucj/article/details/852181 一.关于DLL的介绍 DLL,动态链接库,Dynamic Link Library的 ...
- OCX和DLL的区别
转自:http://blog.csdn.net/scucj/archive/2006/06/29/852181.aspx OCX和DLL的区别 一.关于DLL的介绍 DLL,动态链接库,Dy ...
- C#注册OCX控件
注意 COM组件注册到注册表中的位置,是CLSID还是TypeLib 注册方法 代码执行 //声明注册方法 [DllImport("C:\\Windows\\barcodex.ocx&quo ...
- RegSvr32注册OCX时报错
RegSvr32注册OCX时报错. 错误1: 模块“dsoframer2007.ocx”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80070005. 有关此问题的详 ...
随机推荐
- ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected解决方法
在进行物理主备库角色转换的时候遇到ORA-01093错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; ALTER ...
- java--函数练习
/* 1,定义一个功能,用于打印矩形 1,定义一个打印九九乘法表功能的函数 */ class FunctionTest { public static void main(String[] args) ...
- C++中实现 time_t, tm 相互转换
time_t -> tm: localtime tm -> time_t: mktime time_t curTime; time(&curTime); dwCurTime = c ...
- Linux下安装配置词典GoldenDict
GoldenDict apt-get install goldendict 安装完成以后,需要自己手动加入字典,增加在线翻译网址(例如,有道,金山等),点击 编辑--dictionaries 完 ...
- premake Ubuntu下的安装
premake是个跨平台的编译工具,先看看在Ubuntu下怎么安装. 首先下载,在/usr目录下: sudo wget -O premake-4.4-beta4-linux.tar.gz http:/ ...
- Linux中TCP wrapper的使用
Linux中TCP wrapper的使用 tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念: 服务监听的两种方式: listen ...
- 好消息:8月25日广州嵌入式Linux开发免费项目约定你
8月18日,粤嵌深圳分校举行了盛大的免费嵌入式项目体验,众多嵌入式爱好者排队参加项目体验的火爆场景仿佛还在眼前,体验效果得到学员一致好评.时隔一周,粤嵌广州总部也不容落后,在粤嵌广州总部举办<嵌 ...
- Redis bio
还是一个很小的模块. bio就是background io的意思,既然要background,就要创建线程,创建几个线程呢?有几种类型的io,就创建几个线程.同一种类型的job需要排队,所以存放各自的 ...
- 继承Application实现Android数据共享
Application类 在Android中,启动一个应用,首先会初始化Application,然后再通过它检查AndroidManifest.xml清单文件,选择须要首先启动的Activi ...
- Java中int类型和tyte[]之间转换及byte[]合并
JAVA基于位移的 int类型和tyte[]之间转换 [java] view plaincopy /** * 基于位移的int转化成byte[] * @param int number * @retu ...