首页
社区
课程
招聘
[已解决] 求一个32程序调用64位dll例程,最好用delphi,易语言也可以 300雪币
发表于: 2024-7-20 17:22 3378

[已解决] 求一个32程序调用64位dll例程,最好用delphi,易语言也可以 300雪币

2024-7-20 17:22
3378

32位程序调用 64位dll
自己写的一个测试dll,就一个导出函数
library X64Test;

uses
System.SysUtils,
System.Classes;

{$R *.res}

function ADD(NumA,NumB: Integer): Integer; stdcall;
begin
RESULT:=NumA+NumB;
end;

exports
ADD;

begin
end.


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (57)
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

下载了易易语言的一个例程,不会用,

2024-7-21 00:19
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

2024-7-21 00:22
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个也是载了,请会易语言的大佬,帮忙看看
2024-7-21 00:23
0
雪    币: 4396
活跃值: (4383)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
https://github.com/rwfpl/rewolf-wow64ext
2024-7-21 13:09
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

Mxixihaha大佬,看不懂cpp语言的
2024-7-21 15:04
0
雪    币: 7979
活跃值: (4739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

2024-7-21 17:30
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
romobin大佬,"x64_本地加载dll" 用的哪一个模块
2024-7-21 19:19
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9

把eWOW64Ext_v1.21这个模块也传上来,可以用这个模块吗

上传的附件:
2024-7-21 20:40
0
雪    币: 14873
活跃值: (6098)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10

核心就这2段代码,在你需要进入64位时,复制以下代码即可
delphi 进入64位模式
asm
push $33
db $e8,0,0,0,0
add dword ptr [esp],5
retf
end
delphi退出64位进入32位模式
x64end:
asm
db $e8,0,0,0,0
mov    dword ptr [rsp + 4], $23
add    dword ptr [rsp], $0d
retf
end

最后于 2024-7-22 09:20 被tDasm编辑 ,原因:
2024-7-22 09:16
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
tDasm 大佬,我新建一个64位程序,用下面代码正常调用 
var
  hDLL: THandle;
  pFunc: function(NumA, NumB: Integer): Integer; stdcall;
  result: Integer;
begin

  hDLL := LoadLibrary('X64Test.dll');

  if hDLL <> 0 then
  try
    @pFunc := GetProcAddress(hDLL, 'ADD');
    if @pFunc <> nil then
    begin
      result := pFunc(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
      Edit3.Text := IntToStr(result);
    end
    else
      raise Exception.Create('无法找到函数');
  finally
    FreeLibrary(hDLL);
  end
  else
    raise Exception.Create('无法加载DLL');

end;

请问我新建32位程序,把上面你提供的代码加在什么地方
2024-7-22 13:00
0
雪    币: 7979
活跃值: (4739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
JJGuo romobin大佬,"x64_本地加载dll" 用的哪一个模块
就是这个模块 
3.32版本 精益论坛有
2024-7-22 13:45
0
雪    币: 14873
活跃值: (6098)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你这个代码在win32下只会生成32位代码不会生成64位代码。建议生成64位exe后通过ida反汇编然后内嵌到32位代码中。
asm
push $33
db $e8,0,0,0,0
add dword ptr [esp],5
retf
end
放在loadlibrary前面
2024-7-22 15:49
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
tDasm 你这个代码在win32下只会生成32位代码不会生成64位代码。建议生成64位exe后通过ida反汇编然后内嵌到32位代码中。 asm push $33 db $e8,0,0,0,0 add d ...
试过放在前面,不成功,运行后直接退出了
2024-7-22 16:25
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
romobin 就是这个模块 3.32版本 精益论坛有
大佬没有找到这个模块,可否把你的模块放上来呢
2024-7-22 16:26
0
雪    币: 14873
活跃值: (6098)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16

肯定不会成功,因为在进入64位后执行的还是32位代码。后面这段话你看不懂吗?
你这个代码在win32下只会生成32位代码不会生成64位代码。建议生成64位exe后通过ida反汇编然后内嵌到32位代码中。

最后于 2024-7-22 16:54 被tDasm编辑 ,原因:
2024-7-22 16:53
0
雪    币: 30030
活跃值: (2462)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17

调用还是可以的,来自wow6*4ex那个sample:

  


最后于 2024-7-22 17:15 被bestbird编辑 ,原因:
2024-7-22 17:13
0
雪    币: 30030
活跃值: (2462)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18

没办法贴代码,总是提示请求参数错误。


最后于 2024-7-22 17:17 被bestbird编辑 ,原因:
2024-7-22 17:15
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
bestbird 调用还是可以的,来自wow6*4ex那个sample:
可以在delphi中调用易语言中的函数吗,可以打包上来吗
2024-7-22 19:10
0
雪    币: 30030
活跃值: (2462)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
不懂易语言。
2024-7-22 23:16
0
雪    币: 30030
活跃值: (2462)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
顺便说一句,希望不要介意。真要玩这些东西,不懂C是无法想象的。很多时候,别人给你指明一条路之后,你应该自己想办法付出努力。否则是不可能提高的。
2024-7-22 23:18
0
雪    币: 62
活跃值: (2052)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
bestbird 顺便说一句,希望不要介意。真要玩这些东西,不懂C是无法想象的。很多时候,别人给你指明一条路之后,你应该自己想办法付出努力。否则是不可能提高的。

不会介意,自己不是专业程序员,喜欢delphi,但以前要工作,偶尔用delphi写个小工具提高了工作效率,年龄大了学不动,c有点望而生畏。前些天看到易语言可以32位调用 64位dll,下载了eWOW64Ext_v1.21模块,按照他的方式,


依样画葫芦,

也是直接退出,没成功,不知道哪里不对

2024-7-23 09:33
0
雪    币: 14873
活跃值: (6098)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
说明你写的X64test.dll有问题。应该是
function ADD(NumA,NumB: Integer): Integer; cdecl;
2024-7-23 10:11
0
雪    币: 4722
活跃值: (3234)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
你走上了一个错误的想法,32并不适合调用64,问题很多,就算成功了,也是不稳定的,建议你换个思路
2024-7-23 10:15
0
雪    币: 3876
活跃值: (3683)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
这个估计要夸进程通信调用吧 
2024-7-23 11:25
0
游客
登录 | 注册 方可回帖
返回
//