64位的动调32位的dll 能成立否?
64位的动调32位的dll 能成立否? 本帖最后由 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位的程序进行通信
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来实现? 利用长跳转跳到32位代码段然的调用应该可以吧。 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; 冥界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 我觉得是可以的,只不过没见有人造轮子,32位调用64位的是有的,wow64ext
不太建议混合着来,兼容性不会很好 就是搜wow64ext,看源码吧。 klamauk 发表于 2021-4-10 18:17
就是搜wow64ext,看源码吧。
wow64ext是32调64吧,楼主问的64调32 所以我也是说个"吧"字,只是提供一下思路。
页:
[1]
2