快速业务通道

Windows的动态链接库原理及使用1

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
ry:从内存中移出库模块

语法为:

procedure Freelibrary(Module : THandle);

Module为库模块的句柄。这个值由Loadlibrary返回。

由于库模块在内存中只装载一次,因而调用Freelibrary首先使库模块的引用计数减一。如果引用计数减为0,则卸出该模块。

每调用一次Loadlibrary就应调用一次FreeLibray,以保证不会有多余的库模块在应用程序结束后仍留在内存中。

2.4.2 动态调用举例

对于动态调用,我们举了如下的一个简单例子。系统一共包含两个编辑框。在第一个编辑框中输入一个字符串,而后在第二个编辑框中输入字符。如果该字符包含在第一个编辑框的字符串中,则标签框显示信息:"位于第n位。",否则显示信息:"不包含这个字符。"。

输入检查功能的实现在Edit2的OnKeyPress事件处理过程中,程序清单如下。

    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
     var
      order: Integer;
      txt: PChar;
      PFunc: TFarProc;
      Moudle: THandle;
     begin
      Moudle := Loadlibrary(''c:\dlls\example.dll'');
      if Moudle > 32 then
      begin
       Edit2.text := '''';
       Pfunc := GetProcAddress(Moudle,''Instr'');
       txt := StrAlloc(80);
       txt := StrPCopy(txt,Edit1.text);
       Order := TInstr(PFunc)(txt,Key);
       if Order = -1 then
        Label1.Caption := ''不包含这个字符 ''
       else
         Label1.Caption := ''位于第''+IntToStr(Order+1)+''位'';
      end;
      Freelibrary(Moudle);
     end;

在利用GetProcAddess返回的函数指针时,必须进行强制类型转换:

Order := TInstr(PFunc)(text,Key);

TInStr是一个定义好了的函数类型:

    type
      TInStr = function(Source: PChar;Check: Char): Integer;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号