信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 6750|回复: 23
打印 上一主题 下一主题

Delphi程序调用电脑DLL的全过程解读

[复制链接]

1916

主题

1926

帖子

1万

积分

积分
11218
跳转到指定楼层
宣传软件楼主
发表于 2017-7-31 19:36:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

软件教程首图:

软件教程分类:Delphi基础教程 

软件图文教程视频教程分类:软件图文教程 

软件教程难易程度:软件中级教程 

软件教程发布日期:2017-07-31

软件教程关键字:Delphi程序调用电脑DLL的全过程解读

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件定制网站 网址:http://www.postbbs.com

软件教程详细描述
本帖最后由 群发软件 于 2017-7-31 19:39 编辑

DLL是创建Windows应用程序,实现代码重用的重要手段。那么当我们需要在进程间共享数据时,怎样做才能快捷方便地实现呢?在32位应用系统中,每个应用程序会将DLL映射到自己的地址空间,同时DLL中的数据也就随之被映射了。这样,每个应用程序都有自己的数据实例,在一个应用程序中修改DLL中的全局变量,不会影响其它的应用程序。DLL的使用似乎与我们的目的相背离,那么如何才能实现我们想要的东东呢?这里给大家介绍一种特殊的技术,那就是内存映射文件。
  内存映射文件提供了一种方法,就是在WIN32系统的地址空间保留一块内存区域,物理存储可以向其中提交。并且内存映射文件不只是磁盘文件,也可以是WIN32的页面文件,而且后者比前者要好,因为这意味着可以像访问一个磁盘文件那样访问内存中的一个区域,而不用创建临时文件,用完后还得删除它。WIN32有自己的管理页面调度文件,当不需要页面调度文件时,系统会自动将有关区域释放。以下是具体的实现代码:
library Project1;
uses
shareMem,
windows,
SysUtils,
Classes;
const
 MFileName: Pchar = ’ShareData’;
 //定义一个记录类型,你所需要共享的数据就保存在这里。
 //当在进程中调用GetDllData时,进程中也应该定义一个与这个一样的记录类型。
type
 PGlobalDllData = ^TGlobalDllData;
 TGlobalDllData = record
 s: string[50];
 i: integer;
end;
var
 GlobalData: PGlobalDllData; //这是一个全局变量,指向创建的内存映射文件。
 MapHandle: THandle;
 //给外部进程调用的过程,当外部进程调用这个过程后,形参AGlobalData就指向了我//们创建的内存映射文件. 我们可以创建两个进程, 同时调用这个过程, 那么在其中一个进 //程中修改数据后, 在另外一个进程中既可反应出来, 实现了我们需要的共享.
procedure GetDllData(var AGlobalData: PGlobalDllData);stdcall; begin
 AGlobalData := GlobalData;
end;
procedure OpenThisData;
var
 size: integer;
begin
 size := sizeof(TGlobalDllData);
 //创建一个内存文件映射对象,MfileName保存的值就是该对象的名字。
 mapHandle := CreateFileMapping(Dword(-1), nil, page_readWrite, 0, size, MFileName);
 if mapHandle = 0 then
  RaiseLastWin32Error;
  //把文件的视图映射到调用进程的地址空间,该函数的返回值就是该对象的首地址。注//意,这是调用进程的地址,两个应用程序调用该DLL,返回值是不一样的。
 GlobalData := MapViewOfFile(mapHandle, File_map_all_Access, 0, 0, size);
 Globaldata^.s := ’TEST’;
 GlobalData^.i := 5;
 if GlobalData = nil then
 begin
  CloseHandle(MapHandle);
  RaiseLastWin32Error;
 end;
end;
//DLL从进程中分离出来时,应该释放相应的空间
procedure CloseThisData;
begin
 unmapViewOfFile(GlobalData);
 closeHandle(MapHandle);
end;
procedure DllEntryPoint(dwReason: DWord);
begin
 case dwReason of
  Dll_Process_Attach: OpenThisData; //调用DLL时传入的参数,由系统自动传入
  Dll_Process_Detach: CloseThisData; //释放DLL时传入的参数,系统自动传入。
 end;
end;
{$R *.res}
exports
 GetDllData; //外部应用程序调用的就是这个过程。

begin
 DllProc := @DllEntryPoint; //该变量是一个全局变量,由它来指定DLL的入口及出 //口函数。
 DllEntryPoint(Dll_Process_Attach);
end.
//以上代码在DELPHI6中编译通过。
Delphi中DLL数据共享二月 13th, 2011

在16位Windows时代,DLL内存的处理和32位Win32的处理时不同的。在16位的DLL中,可以在不同应用程序之间共享全局内存。换句话说,如果在16为DLL中声明了一个全局变量,任何调用该DLL的引用程序都可以修改这个变量,这种修改回反映到其他应用程序中。
在Win32中不存在这种DLL的全局数据共享。由于每个应用程序进程把DLL映射到自己的地址空间中,DLL的数据也映射到了应用程序进程空间中。所以每个应用程序具有自己的DLL数据实例。一个应用程序对DLL中全局数据的修改不会影响到其他应用程序。
那如何实现在Win32下DLL数据共享呢,这是可以用内存映射文件来储存共享数据。内存映像文件可以映射一个文件,一个文件中的指定区域或者指定的内存块,其中的数据就可以用内存读写指令来直接访问,而不必频繁的调用I/O系统函数,从而提高了文件存取速度和效率。
映像文件的另一个重要应用就是用来支持永久命名的共享内存。要在两个应用程序之间共享内存,可以在一个应用程序中创建一个文件并映射之,然后另一个程序可以通过打开和映射该文件,并把它作为自己进程的内存来使用。
创建映像文件CreateFileMapping(   hFile: THandle;   lpFileMappingAttributes:   PSecurityAttributes;   flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD;   lpName: PChar): THandle;
  • hFile:是调用FileOpen或FileCreate函数后返回的文件句柄。如果不是共享文件而是共享内存区域,在这里需要设为$FFFFFFFF(DWord(-1)).
  • lpFileMappingAttributes参数是文件映像的安全属性结构(一般设为nil)。
  • flProtect 参数是文件的保护类型(PAGE_READ为可读 PAGE_WRITE为可写 PAGE_READWRITE为可读写)
  • dwMaximumSizeHigh 参数用于指定文件映像的大小的高32位。
  • dwMaximumSizeLow 参数用于指定文件映像的大小的低32位。
  • lpName 参数用于指定映像名。
如果函数调用成功,将返回文件映像的句柄。
打开映像文件OpenFileMapping(    dwDesiredAccess: DWORD;    bInheritHandle: BOOL;    lpName: PChar): THandle;
  • dwDesiredAccess 用于指定访问数据的模式(FILE_MAP_READ为可读 FILE_MAP_WRITE为可写 FILE_MAP_ALL_ACCESS为可读写)
  • bInheritHandle 参数指定OpenFileMapping 函数返回的句柄在以后新建的子进程中是否得到继承。
  • lpName 参数用于指定映像名。
如果函数调用成功,将返回文件映像的句柄。
映射到本地进程MapViewOfFile(    hFileMappingObject: THandle;    dwDesiredAccess: DWORD;    dwFileOffsetHigh,dwFileOffsetLow,dwNumberOfBytesToMapWORD): Pointer;
  • hFileMappingObject 参数通过CreateFileMapping 或 OpenFileMapping返回的文件映像句柄。
  • dwDesiredAccess 用于指定访问数据的模式(FILE_MAP_READ为可读 FILE_MAP_WRITE为可写 FILE_MAP_ALL_ACCESS为可读写)
  • dwFileOffsetHigh 参数用于指定数据在映像文件中的起始位置的高32为
  • dwFileOffsetLow 参数用于指定数据在映像文件中的起始位置的低32位。
  • dwNumberOfBytesToMap 参数用于指定需要映射的字节数,设为0表示文件或内存区域的全部。
如果函数调用成功将返回数据映射的起始地址,这是本进程中可以直接访问的内存地址指针。关闭内存映射UnmapViewOfFile(    lpBaseAddress: Pointer): BOOL;
  • lpBaseAddress为MapViewoffFile返回的内存指针


untoDelphi ListView用法太全应该有的技巧全部在这里可以总结next必通网B2B网广告群发软件信息发布软件脚本
回复

使用道具 举报

0

主题

605

帖子

589

积分

积分
589
信息发布软件沙发
发表于 2017-8-1 07:51:34 | 只看该作者
错,服务也非常到位,后面有朋友都会介绍过来的,加油加油!

回复 支持 反对

使用道具 举报

0

主题

2091

帖子

5

积分

积分
5
推广工具板凳
发表于 2017-8-2 23:02:45 | 只看该作者
号和35号的热情服务,谢谢,下次还会找你们哦

回复 支持 反对

使用道具 举报

0

主题

624

帖子

604

积分

积分
604
软件定制开发地板
发表于 2017-8-3 06:05:40 | 只看该作者
真的很好

回复 支持 反对

使用道具 举报

0

主题

602

帖子

594

积分

积分
594
5#定制软件#
发表于 2017-8-3 12:10:44 | 只看该作者
的用心,有耐心,下次再合作咯。

回复 支持 反对

使用道具 举报

0

主题

1022

帖子

1029

积分

积分
1029
6#定制软件#
发表于 2017-8-4 19:41:30 | 只看该作者
好,页面设计很满意,而且也很快,非常有效率,第一次买,遇到这么好的卖家,这么高效的服务,真的太幸运了,太谢

回复 支持 反对

使用道具 举报

0

主题

2108

帖子

2

积分

积分
2
7#定制软件#
发表于 2017-8-4 21:19:54 | 只看该作者
,一般般

回复 支持 反对

使用道具 举报

0

主题

577

帖子

559

积分

积分
559
8#定制软件#
发表于 2017-8-7 03:29:04 | 只看该作者
错服务也好尤其是模版老师我是必须得夸一夸了服务态度都是10颗星一开始我不太懂那个模版怎么安装把我给急的都快撞电脑了是模版老师不厌其烦一步一步指导的现在我的店铺好漂亮啊真心感谢店家和模版老师哦!

回复 支持 反对

使用道具 举报

0

主题

641

帖子

627

积分

积分
627
9#定制软件#
发表于 2017-8-11 03:18:10 | 只看该作者
.耐心。负责

回复 支持 反对

使用道具 举报

20

主题

2263

帖子

4131

积分

积分
4131
10#定制软件#
发表于 2017-8-12 03:53:43 | 只看该作者
是不错,是超级赞的,但后续的服务希一如以前。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
群发软件JavaScript语法小示例
JavaScript语法小示例
群发软件展示JavaScript各种语句标识符的实际应用
展示JavaScript各种语句标识符的实际应用
群发软件AIWROK条件语句实用示例智能活动推荐系统
AIWROK条件语句实用示例智能活动推荐系统
群发软件AIWROK软件示例数组方法实战应用
AIWROK软件示例数组方法实战应用
群发软件示例JavaScript的 try-catch-finally-throw用法
示例JavaScript的 try-catch-finally-throw用法
群发软件JavaScript 高级错误处理实战示例
JavaScript 高级错误处理实战示例
群发软件安卓脚本AIWROK软件示例JS函数高级用法
安卓脚本AIWROK软件示例JS函数高级用法
群发软件AIWROK环境JavaScript编码规范完整示例
AIWROK环境JavaScript编码规范完整示例
群发软件安卓脚本示例实时截图判断页面变化
安卓脚本示例实时截图判断页面变化
群发软件苹果脚本7种不同的OCR识别
苹果脚本7种不同的OCR识别
群发软件安卓脚本多变的function用法
安卓脚本多变的function用法
群发软件苹果脚本示例Config配置H5集成
苹果脚本示例Config配置H5集成
群发软件安卓脚本类型判断与Boolean对象综合示例
安卓脚本类型判断与Boolean对象综合示例
群发软件线程全局变量H5可视化控制台
线程全局变量H5可视化控制台
群发软件秒吐司快速显示和关闭的UI提示窗口
秒吐司快速显示和关闭的UI提示窗口
群发软件苹果脚本里H5 里的 window.at.callFun 示例
苹果脚本里H5 里的 window.at.callFun 示例
群发软件H5日志打印运行过程例子
H5日志打印运行过程例子
群发软件AIWROK软件字符串方法实用案例
AIWROK软件字符串方法实用案例
群发软件HID贝塞尔曲线运动控制器
HID贝塞尔曲线运动控制器
群发软件AIWROK苹果脚本sleep方法综合实战示例
AIWROK苹果脚本sleep方法综合实战示例
群发软件苹果脚本Line控件的多种创意用法和实际应用场景
苹果脚本Line控件的多种创意用法和实际应用场景
群发软件苹果脚本toast高级应用综合示例
苹果脚本toast高级应用综合示例
群发软件苹果智能OCR自动化助手
苹果智能OCR自动化助手
群发软件苹果脚本UI超快速点击示例
苹果脚本UI超快速点击示例
群发软件展示时间戳的各种复杂处理方法
展示时间戳的各种复杂处理方法
群发软件苹果脚本随机数实用示例
苹果脚本随机数实用示例
群发软件安卓手机脚本多种倒计时显示方式
安卓手机脚本多种倒计时显示方式
群发软件苹果脚本屏幕事件EVENT示例
苹果脚本屏幕事件EVENT示例
群发软件苹果脚本屏幕类screen例子
苹果脚本屏幕类screen例子
群发软件安卓手机config配置演示实列
安卓手机config配置演示实列
群发软件苹果脚本配置config小实例
苹果脚本配置config小实例 https://www.yuque.com/aiwork/dcvhmb/qolobpysdg0hvi2e
群发软件苹果脚本矩形类rect小实例
苹果脚本矩形类rect小实例
群发软件AIWROK安卓苹果平台设计的实用工具库
AIWROK安卓苹果平台设计的实用工具库
群发软件AIWROK软件Function导入方法实例演示
AIWROK软件Function导入方法实例演示
群发软件苹果脚本实例1项目project应用示例
苹果脚本实例1项目project应用示例
群发软件苹果脚本实例1剪贴板功能集成
苹果脚本实例1剪贴板功能集成
群发软件苹果iOS脚本Detect类系统性使用示例
苹果iOS脚本Detect类系统性使用示例
群发软件AIWROK苹果系统打印H5界面日志输出
AIWROK苹果系统打印H5界面日志输出
群发软件H5案例自动化看广告撸金币系统
H5案例自动化看广告撸金币系统
群发软件AIWROK苹果脚本H5任务执行小例子
AIWROK苹果脚本H5任务执行小例子
群发软件AIWROK软件苹果水平容器[Horizontal]小实例
AIWROK软件苹果水平容器[Horizontal]小实例
群发软件AIWROK苹果脚本实例1界面UI输入框类[Input]
AIWROK苹果脚本实例1界面UI输入框类
群发软件AIWROK软件苹果脚本案例1空白站位[Space]方法
AIWROK软件苹果脚本案例1空白站位[Space]方法
群发软件AIWROK软件苹查系统复选框用法
AIWROK软件苹查系统复选框用法
群发软件苹果AIWROK实例单选按钮组类[RadioButtonGroup]完整综合示例
苹果AIWROK实例单选按钮组类[RadioButtonGroup]完整综合示例
群发软件AIWROK软件苹果实例UI-垂直容器[Vertical]高级综合示例
AIWROK软件苹果实例UI-垂直容器[Vertical]高级综合示例
群发软件IOS苹果脚本View的完整功能实例
IOS苹果脚本View的完整功能实例
群发软件AIWROK苹果系统实例演示1标签类[Label]方法
AIWROK苹果系统实例演示1标签类[Label]方法
信息发布软件AIWROK软件苹果UI按钮Button方法示例
AIWROK软件苹果UI按钮Button方法示例
信息发布软件AIWROK软件苹果TAB界面视图示例
AIWROK软件苹果TAB界面视图示例
信息发布软件AIWROK苹果系统自带view视图简洁UI界面示例
AIWROK苹果系统自带view视图简洁UI界面示例
信息发布软件汇集HID安卓输入文字的方法和复制粘贴示例
汇集HID安卓输入文字的方法和复制粘贴示例
信息发布软件AIWROK软件找字与OCR方法汇总示例
AIWROK软件找字与OCR方法汇总示例
信息发布软件AIWROK软件找图方法汇总示例
AIWROK软件找图方法汇总示例
信息发布软件AIWROK软件滑动方法集合示例
AIWROK软件滑动方法集合示例
信息发布软件AIWROK软件安卓AIWROK汇集软件点击
AIWROK软件安卓AIWROK汇集软件点击
信息发布软件苹果系统点击方法综合示例
苹果系统点击方法综合示例
信息发布软件AIWROK苹果系统找图方法完整示例集合
AIWROK苹果系统找图方法完整示例集合
信息发布软件苹果系统找图方法完整示例集合
苹果系统找图方法完整示例集合
信息发布软件苹果IOS系统找字OCR方法例子
苹果IOS系统找字OCR方法例子
信息发布软件AIWORK软件数组高级示例
AIWORK软件数组高级示例
信息发布软件AIWROK软件运算符封装库示例
AIWROK软件运算符封装库示例
信息发布软件AIWROK软件语法运行小示例
AIWROK软件语法运行小示例
信息发布软件AIWROK软件JS循环小示例
AIWROK软件JS循环小示例
信息发布软件AIWROK软件H5网页被主脚本获取值用法
AIWROK软件H5网页被主脚本获取值用法

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2026-5-14 05:41 , Processed in 0.851543 second(s), 55 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表