动态链接库编程(二)

2016-01-29 14:05 8 1 收藏

动态链接库编程(二),动态链接库编程(二)

【 tulaoshi.com - Delphi 】

 

10.3.2.2 服务器程序的编写 

  服务器程序必须包含对DLL的调用代码,如: 

function GetGlobalMem: THandle; far; external 'c:dllsglbmem';

  通过调用该函数,服务器可以获得全局内存块的句柄。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

  在写入数据前,服务器必须锁定全局内存,以避免在写入过程中Windows移动该内存块的位置。

  函数GlobalLock锁定全局内存并返回指向该内存块的指针: 

pMem := GlobalLock(hMem);

  对pMem的任何修改都会反映到全局内存块中。

  对内存块进行操作后,调用GlobalUnLock进行解锁。内存块操作之后尽早解锁,有利于Windows充分利用内存资源。

  服务器写入数据的实现代码如下。 

var

hMem: THandle;

pMem: PChar;

begin

hMem := GetGlobalMem; {获得全局内存块的句柄}

if hMem < 0 then

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

begin

pMem := GlobalLock(hMem); {加锁全局内存块}

if pMem < nil then

begin

StrPCopy(pMem,Memo1.text); {向全局内存块写入数据}

GlobalUnlock(hMem); {解锁全局内存块}

end

else

MessageDlg('Couldnot Lock memory block',mtWarning,[mbOK],0);

end; 

10.3.2.3 客户程序的编写 

  客户程序几乎是服务器程序的翻版。唯一的区别在于一个是写入数据,一个是下载数据。

下面是客户从全局内存块下载数据的程序清单。 

var

hMem: THandle;

pMem: PChar;

begin

hMem := GetGlobalMem; {获得全局内存块的句柄}

if hMem < 0 then

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

begin

pMem := GlobalLock(hMem); {加锁全局内存块}

if pMem < nil then

begin

Memo1.text := StrPas(pMem); {从全局内存块读取数据}

GlobalUnlock(hMem); {解锁全局内存块}

end

else

MessageDlg('Couldnot Lock memory block',mtWarning,[mbOK],0);

end;

10.4 利用DLLs实现窗体重用 

  实现窗体重用是Delphi DLLs功能中一个引人注目的特色。当你创建了一个令自己满意的通用窗体并希望能在不同应用程序中使用,特别是希望能在非Delphi 应用程序中使用时,把窗体做进一个动态链接库中是最适当的。这样即使用其它工具开发的应用程序,如C++Visual Basic等,也都可以去调用它。

  包含窗体的DLLs100K左右的部件库(Component Library)开销。可以通过把几个窗体编译成一个DLLs来最小化这笔开销。DLl中的不同窗体可以共享部件库。 

10.4.1 利用DLLs实现窗体重用的一般步骤 

  利用DLLs实现窗体重用的步骤是:

  1.在集成开发环境(IDE)中,按自己的需要设计一个窗体;

  2.编写一个用于输出的函数或过程。在该函数或过程中,设计的窗体被实例化;

  3.重复步骤1

来源:https://www.tulaoshi.com/n/20160129/1492468.html

延伸阅读
比较大应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间...
/*****************************************************************                             clearMyHook* Inputs:*       HWND hWnd: Window whose ho...
虽然能用DLL实现的功能都可以用COM来替代,但DLL的优点确实不少,它更容易创建。本文将讨论如何利用VC MFC来创建不同类型的DLL,以及如何使用他们。 一、DLL的不同类型 使用VC++可以生成两种类型的DLL:MFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。 1、MFC扩展DL...
1.Windows的动态链接库原理 动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函数库。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这 种方法同只把函数储存在已...
摘要 文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。 关键词:VB,动态连接库DLL,C程序 一、引言 VisualBasic(以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广...