关于DLL和主程序里面的全局变量问题。

Sunblog 2005-03-21 01:41:04
procedure Secret16Encrypt(lpInBuffer:PChar; lpKey:PChar);
var
Secret16Encrypt: function(lpInBuffer:PChar; lpKey:PChar; lpOutBuffer:PChar): Boolean; stdcall;
OutputStr: array [0..16] of Char;
begin
FillChar(OutputStr, Sizeof(OutputStr), #0);
Initialize;
if hlib <> 0 then begin
@Secret16Encrypt := GetProcAddress(hlib, 'Secret16Encrypt');
if @Secret16Encrypt <> nil then begin
if Secret16Encrypt(lpInBuffer, lpKey, OutputStr) then
Return := OutputStr
else
Return := '函数调用错误!'
end
else
ShowMessage('加载功能模块出错!');

FreeLibrary(hlib);
end
else
ShowMessage('无法加载DLL!');
end;

上面这段代码是我从人家的一个DEMO里面拷贝出来的,它功能是就是输入一个字符串和一个Key然后得到加密结果,但是它没有通过函数返回加果,而是通过函数参数返回结果,lpOutBuffer就是返回结果,这样的效果应该在DLL怎么定义呢?
不用VAR应该怎么实现?
...全文
180 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunblog 2005-03-22
  • 打赏
  • 举报
回复
我的全部调用代码如下

这是DLL代码:
library AppDll;

uses
SysUtils,Windows,Classes,Dialogs;

{$R *.res}

function AddStr(lpInputStr:PChar;lpOutputStr:PChar):Boolean;stdcall;
begin
try
lpOutputStr:=PChar(StrPas(lpInputStr)+'abcdef');
Result:=True;
except
Result:=False;
end;
end;

exports
AddStr;

begin
end.

主程序代码:
var
hlib: HMODULE;

implementation

{$R *.dfm}

procedure Initialize;
begin
hlib:= LoadLibrary('AppDLL.dll');
end;

Procedure Str(lpInputStr:PChar);
var
AddStr: function(lpInputStr:PChar;lpOutputStr:PChar): Boolean; stdcall;
DllStr:array[0..30] of Char;
begin
FillChar(DllStr, SizeOf(DllStr), #0);
Initialize;
if hlib <> 0 then begin
@AddStr := GetProcAddress(hLib, 'AddStr');
if @AddStr <> nil then begin
if AddStr(lpInputStr, DllStr) then
Form1.Edit1.Text:= DLLStr
else
Form1.Edit1.Text:= '函数调用错误!'
end
else
ShowMessage('加载功能模块出错!');

FreeLibrary(hLib);
end
else
ShowMessage('无法加载DLL!');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Str(PChar('123456'));
end;
Sunblog 2005-03-22
  • 打赏
  • 举报
回复
hlib定义的是DLL名字。
可能大伙还没有看明白我的意思吧,我的意思是最后函数返回加密后的值是返回给lpOutBuffer,这样是怎么样做到的?
yangyangliu 2005-03-21
  • 打赏
  • 举报
回复
hlib是哪里来的?
qzxyd 2005-03-21
  • 打赏
  • 举报
回复
pchar是一个指向字符的指针,在dll中都是这样作的,delphi里的dll返回string不通用。用指针才能兼营microsoft的c,c++等。
gzmhero 2005-03-21
  • 打赏
  • 举报
回复
lpOutBuffer就是把指针传递到函数里面,定义没什么特殊的。
function Secret16Encrypt(lpInBuffer:PChar; lpKey:PChar; lpOutBuffer:PChar): Boolean;
tonycjl 2005-03-21
  • 打赏
  • 举报
回复
LoadLibrary?
Bitter_fish 2005-03-21
  • 打赏
  • 举报
回复
PChar就是一个指针,指向返回结果的内存首地址,所以和var是一回事。

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧