冥界3大法王 发表于 2021-4-10 17:20

64位的动调32位的dll 能成立否?

64位的动调32位的dll 能成立否?

lyl610abc 发表于 2021-4-10 17:32

本帖最后由 lyl610abc 于 2021-4-10 17:35 编辑

64位可执行文件不能调用32位dll,反之亦然。除非您实际上需要应用程序为64位,否则最简单的选择是将其设置为目标x86。这仍将允许它在32位和64位版本的Windows上运行。

如果由于某种原因这不适用,则可能的解决方案是创建一个单独的32bit进程,该进程将加载32bit dll,并使您的64bit应用程序与其他进程进行通信,可能使用IPC(在某些情况下,重定向标准输入输出也可以工作,甚至只是检查过程的返回值)。无论如何,这会导致一些额外的工作;我建议您先准确地审查您的要求

以上回答 翻译自 微软社区:https://social.msdn.microsoft.co ... forum=csharpgeneral


正常来说就是:不能直接调用,也不建议你这么做。除非你的应用场景一定得要是64位的。如果实在想要这么搞,得创建一个单独的32位的进程,然后用32位的进程去加载32位的dll,之后用32位的进程和64位的程序进行通信

冥界3大法王 发表于 2021-4-10 18:03

lyl610abc 发表于 2021-4-10 17:32
64位可执行文件不能调用32位dll,反之亦然。除非您实际上需要应用程序为64位,否则最简单的选择是将其设置 ...

@lyl610abc
是不是就是这页面中说的注入线程
https://stackoverflow.com/questions/30716643/delphi-xe2-error-compiling-asm-code-with-x64-compiler-unsupported-language-feat

或QQ群说的封装成activeX来实现?

klamauk 发表于 2021-4-10 18:09

利用长跳转跳到32位代码段然的调用应该可以吧。

冥界3大法王 发表于 2021-4-10 18:13

klamauk 发表于 2021-4-10 18:09
利用长跳转跳到32位代码段然的调用应该可以吧。

@klamauk 请教,能改否?
//function TForm1.GetSerialMotherBoard: string;   //获取主板ID
//var
//a, b, c, d: LongWord;
//begin
//asm
//      push    EAX
//      push    EBX
//      push    ECX
//      push    EDX
//      mov   eax, 1
//      db      $0F, $A2
//      mov   a, EAX
//      mov   b, EBX
//      mov   c, ECX
//      mov   d, EDX
//      pop   EDX
//      pop   ECX
//      pop   EBX
//      pop   EAX
//end;
//result := inttohex(a, 8) + '-' + inttohex(b, 8) + '-' + inttohex(c, 8) + '-' + inttohex(d, 8);
//end;

lyl610abc 发表于 2021-4-10 18:13

冥界3大法王 发表于 2021-4-10 18:03
@lyl610abc
是不是就是这页面中说的注入线程
https://stackoverflow.com/questions/30716643/delphi-xe ...

不是很懂你发的网站的内容
想要实现64位程序加载32位DLL,需要先创建一个32位的进程,用32位进程加载32位DLL,然后使用COM实现64位程序和32位进程的通信,间接地调用32位的DLL
相关博客:https://blog.csdn.net/nie2314550441/article/details/49867735

苏紫方璇 发表于 2021-4-10 18:14

我觉得是可以的,只不过没见有人造轮子,32位调用64位的是有的,wow64ext
不太建议混合着来,兼容性不会很好

klamauk 发表于 2021-4-10 18:17

就是搜wow64ext,看源码吧。

苏紫方璇 发表于 2021-4-10 18:19

klamauk 发表于 2021-4-10 18:17
就是搜wow64ext,看源码吧。

wow64ext是32调64吧,楼主问的64调32

klamauk 发表于 2021-4-10 18:22

所以我也是说个"吧"字,只是提供一下思路。
页: [1] 2
查看完整版本: 64位的动调32位的dll 能成立否?