64位进程调用32位dll的解决方法

lzjdlsl 2010-09-06 06:29:25
有两篇文章比较靠谱。不过不知道具体方法。
http://www.cnblogs.com/mazhenyu/archive/2007/06/28/798710.html
创建一个进程外COM(EXE类型),内部链接dll,不懂这个什么意思。
另外有说使用代理进程(dllhost.exe)也不懂如何实现。
有做过的人关注下。谢谢。
...全文
2871 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxcllb20100 2011-12-27
  • 打赏
  • 举报
回复 2
您好:
在博客园上看到一篇文章:
64位进程调用32位dll的解决方法
http://www.cnblogs.com/mazhenyu/archive/2007/06/28/798710.html
验证:
工作流程:
1.创建一个进程外COM服务器(EXE)。
2.将32位dll的接口函数封装为COM服务器的相关接口。
3.注册COM服务器*.exe /regserver (注销 *.exe /unregserver)。
4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。
具体步骤:
我首先创建了一个简单的dll工程,只输出一个函数int c = add(int a,int b); 生成lib和dll
然后创建一个进程外COM(EXE类型),内部链接dll,添加方法Method: Add(long *c)
{ *c = add(1,2);}编译生成。
然后注册COM,*.exe /regserver
最创建一个64位WIN32工程验证64位环境下方法调用是否正确,经验证正确!!!

本人有三个问题:
1、创建的进程外服务器是用MFC下的还是使用ATL创建?
2、这里的“内部链接dll”是什么意思?怎么样连接呢?
3、注册完COM服务器,是不是就可以在64位下直接调用32的dll而不用调用COM服务器的相关接口呢?感谢大家的指教和浏览!!!如果您能够实现上面的具体步骤麻烦我我说一声哈,我的QQ:542739787,Email:wxcllb@163.com,不甚感激!
wxcllb20100 2011-12-27
  • 打赏
  • 举报
回复
您好:
在博客园上看到一篇文章:
64位进程调用32位dll的解决方法
http://www.cnblogs.com/mazhenyu/archive/2007/06/28/798710.html
验证:
工作流程:
1.创建一个进程外COM服务器(EXE)。
2.将32位dll的接口函数封装为COM服务器的相关接口。
3.注册COM服务器*.exe /regserver (注销 *.exe /unregserver)。
4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。
具体步骤:
我首先创建了一个简单的dll工程,只输出一个函数int c = add(int a,int b); 生成lib和dll
然后创建一个进程外COM(EXE类型),内部链接dll,添加方法Method: Add(long *c)
{ *c = add(1,2);}编译生成。
然后注册COM,*.exe /regserver
最创建一个64位WIN32工程验证64位环境下方法调用是否正确,经验证正确!!!

本人有三个问题:
1、创建的进程外服务器是用MFC下的还是使用ATL创建?
2、这里的“内部链接dll”是什么意思?怎么样连接呢?
3、注册完COM服务器,是不是就可以在64位下直接调用32的dll而不用调用COM服务器的相关接口呢?感谢大家的指教和浏览!!!如果您能够实现上面的具体步骤麻烦我我说一声哈,我的QQ:542739787,Email:wxcllb@163.com,不甚感激!
lzjdlsl 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lisunlin0 的回复:]
windows64位编程白皮书里面已经明确讲了,win64与win32在用户层是严格隔离开的,win32应用程序不可以访问win64的内存,win64也不能读取win32的内存。
它们之间可以使用系统提供的通信办法来交换数据。
[/Quote]
恩。那楼上的可以具体点吗。它们之间可以使用系统提供的通信办法来交换数据。
sunlin7 2010-09-07
  • 打赏
  • 举报
回复
windows64位编程白皮书里面已经明确讲了,win64与win32在用户层是严格隔离开的,win32应用程序不可以访问win64的内存,win64也不能读取win32的内存。
它们之间可以使用系统提供的通信办法来交换数据。
lzjdlsl 2010-09-07
  • 打赏
  • 举报
回复
我建立一个32位的进程调用dll。然后通过64的进程和这个exe通信。比如我想调用哪一个函数就发一个消息。32位的exe接收到消息后就去调用相应的函数。然后通过消息的方式再发还给64位的exe。不过这里面有个同步的问题。也就是我我必须等待会影响我的性能和稳定性。
上面提到的创建一个进程外COM的方式。实在不明白是什么意思。不知道还有人可以给我讲讲进程外COM的方式不,谢谢
oyljerry 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lzjdlsl 的回复:]
再包装一个32bit的exe?你的意思是说64bit的程序通过路径的方式去program(x86)目录下去调出这个程序?但是这个时候32bit的exe是被wow64子系统托管着。不会有什么问题吗。我试试看。谢谢提点
[/Quote]
通过进程通信,socket,消息等,wow64等无所谓..也一样可以通信交换数据等
sl_shalou 2010-09-06
  • 打赏
  • 举报
回复
好好学习
「已注销」 2010-09-06
  • 打赏
  • 举报
回复
W64,一个怪胎。
new_new_man 2010-09-06
  • 打赏
  • 举报
回复
路过 好好学习
zgsdzhaolanxiang1 2010-09-06
  • 打赏
  • 举报
回复
学习了
lzjdlsl 2010-09-06
  • 打赏
  • 举报
回复
再包装一个32bit的exe?你的意思是说64bit的程序通过路径的方式去program(x86)目录下去调出这个程序?但是这个时候32bit的exe是被wow64子系统托管着。不会有什么问题吗。我试试看。谢谢提点
oyljerry 2010-09-06
  • 打赏
  • 举报
回复
都不是64bit进程直接加载,而是等于再包装一个32bit的exe来加载32bit的DLL,然后64bit的进程跟32bit的进程通信来变相调用32bit的dll

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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