Использование функции из DLL

Советы » DLL » Использование функции из DLL

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

library

StrSrchLib; uses

Wintypes, WinProcs, SysUtils, Dialogs; type

{ declare the callback function type } TFoundStrProc = procedure

(StrPos: PChar); StdCall

; function

SearchStr(ASrcStr, ASearchStr: PChar; AProc: TFarProc): Integer; stdcall

; { This function looks for ASearchStr in ASrcStr. When if finds ASearchStr, the callback procedure referred to by AProc is called if one has been passed in. The user may pass nil as this parameter. } var

FindStr: PChar; begin

FindStr := ASrcStr; FindStr := StrPos(FindStr, ASearchStr); while

FindStr <> nil

do

begin

if

AProc <> nil

then

TFoundStrProc(AProc)(FindStr); FindStr := FindStr + 1; FindStr := StrPos(FindStr, ASearchStr); end

; end

; exports

SearchStr; begin

end

.

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit

MainFrm; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type

TMainForm = class

(TForm) btnCallDLLFunc: TButton; edtSearchStr: TEdit; lblSrchWrd: TLabel; memStr: TMemo; procedure

btnCallDLLFuncClick(Sender: TObject); end

; var

MainForm: TMainForm; Count: Integer; implementation

{$R *.DFM} { Define the DLL's exported procedure } function

SearchStr(ASrcStr, ASearchStr: PChar; AProc: TFarProc): Integer; stdcall

external

'STRSRCHLIB.DLL'; { Define the callback procedure, make sure to use the StdCall directive } procedure

StrPosProc(AStrPsn: PChar); stdcall

; begin

inc(Count); // Increment the Count variable. end

; procedure

TMainForm.btnCallDLLFuncClick(Sender: TObject); var

S: string

; S2: string

; begin

Count := 0; // Initialize Count to zero. { Retrieve the length of the text on which to search. } SetLength(S, memStr.GetTextLen); { Now copy the text to the variable S } memStr.GetTextBuf(PChar(S), memStr.GetTextLen); { Copy Edit1's Text to a string variable so that it can be passed to the DLL function } S2 := edtSearchStr.Text; { Call the DLL function } SearchStr(PChar(S), PChar(S2), @StrPosProc); { Show how many times the word occurs in the string. This has been stored in the Count variable which is used by the callback function } ShowMessage(Format('%s %s %d %s', [edtSearchStr.Text, 'occurs', Count, 'times.'])); end

; end

.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com