DLL中参数反转(50分)

  • 主题发起人 主题发起人 hqpeng
  • 开始时间 开始时间
H

hqpeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一本书中看到一制作DLL例子,但总是得不到理想的结果.
DLL中有一函数ReverseStr(X),如X='CATFOOD',调用返回值应为:
reverseStr(X)=0,X='DOOFTAC'.
请大侠给出调用的主过程.
DLL源程序如下:
library Reverse;
uses
SysUtils,
Classes;
function ReverseStr(StrToReverse:Pchar):integer;export;stdcall;
var
BFGLen:Integer;
Temp:char;
Count:Integer;
begin
BFGLen:=strLen(StrToReverse);
for count:=0 to (BfGLen div 2)-1 do
begin
temp:=strToReverse[count];
strToReverse[count]:=strToReverse[BFGLen-1-Count];
strToReverse[BFGLen-1-Count]:=Temp;
end;
ReverseStr:=0;
end;
exports
ReverseStr;
begin
end.
 
调用过程如下:

var
Form1: TForm1;
//声明调用dll
function ReverseStr(StrToReverse:Pchar):integer;stdcall;external 'mydll.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var a:pchar;
begin
a:=pchar('12345');
showmessage(inttostr(ReverseStr(a))+a);//值参数传递,所以a变成了54321
end;
 
这个例子是“Delphi动画编程”中的一个Dll实例,本人也看到了,并做了调用程序
贴出:
unit ex1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Type
TDllfunc = Procedure (valStr: String);
Var
hLib: THandle;
Dllfunc: TDllfunc;
SouStr: String;
begin
hLib := LoadLibrary('appFunc.DLL');
If hLib = 0 then
Begin
ShowMessage('不能打开appFunc.Dll文件');
Exit;
End;
Dllfunc := TDllfunc(GetProcAddress(hLib, 'ReverseStrEx'));
if @Dllfunc=Nil Then
ShowMessage('反转过程Reverse')
Else
Begin
SouStr := Edit1.text;
DllFunc(souStr);
Edit2.Text := SouStr;
End;
FreeLibrary(hLib);
end;

end.
 
to menxin:
1、你发的e-mail“手纸”收到了,但可是执行程序!最好给个源程序什么的,再者
最好能给出每条语句的注释!
2、以上的你、我的程序能否进行比评一下,你的程序比较简练!
 
James:
我记得给你的是带source的.再看看.
你的方法可以动态加载dll,我的方法是静态调用,各用所长吧.由他自己选吧.
 
多谢两位提供的帮助.再问一句,如何将第三方控件(如async32)做在DLL中?
 
多人接受答案了。
 
我的方法有问题吗? :(
 
手纸? 我不给你发了!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
731
import
I
I
回复
0
查看
816
import
I
I
回复
0
查看
782
import
I
后退
顶部