问题: 我要用嵌套的汇编指令调用外部dll,dll中的接口被声明为stdcall类型.在CALL之前怎么传递接口参数,同时怎么返回函数结果.例如:dll文件接口声明如下:
[文件名] : [路径]mydll.dll
[接口函数] : function Execute(AHandle:THandle,str1:string;int1:integer):integer ; stdcall 调用方式: myRundll32('mydll.dll','Execute',[Handle,'测试一些',100]);myRundll32原型如下:
function myRundll32(dll:string;fName:string;
Params: array of const): DWord;
{
参数说明:
dll : dll文件的完整路径
fName : 接口函数的名称,如:Execute
params : 为参数列表
}
具体实现如下,请帮忙完善.
function myRundll32(dll:string;fName:string;
Params: array of const): DWord;
const
RecSize = SizeOf(TVarRec); // 循环处理参数列表时递增的字节数
var
myFunc: Pointer;
ParCount: DWord;
AHandle :THandle;
begin
AHandle:=LoadLibrary(pchar(xdll));
if AHandle=0
then Exit;
myFunc := GetProcAddress(AHandle,pchar(AName));
if not Assigned(myFunc) then
raise Exception.CreateFmt('找不到 %s 的 Method: %s', [xdll,
AName]);
ParCount := High(Params) + 1; // 获取参数个数 //以下为参数处理以及调用
asm
// 此处怎么写????? CALL myFunc // 调用方法
MOV Result, EAX // 返回值放入 Result ,此处怎么写??????
POP ESI
end;
end;//疑惑之处:
1.在调用 [CALL PFunc] 之前怎么处理传入的参数.
2.这种dell的调用,怎么处理返回值.
[文件名] : [路径]mydll.dll
[接口函数] : function Execute(AHandle:THandle,str1:string;int1:integer):integer ; stdcall 调用方式: myRundll32('mydll.dll','Execute',[Handle,'测试一些',100]);myRundll32原型如下:
function myRundll32(dll:string;fName:string;
Params: array of const): DWord;
{
参数说明:
dll : dll文件的完整路径
fName : 接口函数的名称,如:Execute
params : 为参数列表
}
具体实现如下,请帮忙完善.
function myRundll32(dll:string;fName:string;
Params: array of const): DWord;
const
RecSize = SizeOf(TVarRec); // 循环处理参数列表时递增的字节数
var
myFunc: Pointer;
ParCount: DWord;
AHandle :THandle;
begin
AHandle:=LoadLibrary(pchar(xdll));
if AHandle=0
then Exit;
myFunc := GetProcAddress(AHandle,pchar(AName));
if not Assigned(myFunc) then
raise Exception.CreateFmt('找不到 %s 的 Method: %s', [xdll,
AName]);
ParCount := High(Params) + 1; // 获取参数个数 //以下为参数处理以及调用
asm
// 此处怎么写????? CALL myFunc // 调用方法
MOV Result, EAX // 返回值放入 Result ,此处怎么写??????
POP ESI
end;
end;//疑惑之处:
1.在调用 [CALL PFunc] 之前怎么处理传入的参数.
2.这种dell的调用,怎么处理返回值.
只能用PChar的