32bit程序调用64bit dll 的解决办法

32bit程序调用64bit dll 的解决办法

32bit程序不能直接调用64bit的dll,我们采用COM进程外组件的方式来实现间接调用。

简单来说就是编写COM进程外组件,封装64位dll的功能,编译COM组件为64bit版本。

然后32bit的应用程序去调用该COM组件,经过测试成功。具体代码见附件。附件中并没有封装一个64bit的dll,只是写了一个简单的com对象。

COM组件是用vs2010写的,COM组件测试程序用vc6编写。

测试步骤:

我的环境是win7 x64,

首先以管理员身份运行vs2010,打开procout工程,编译配置选x64,release 编译工程,得到2个文件:ProcOut.exe,ProcOutPS.dll

2.打开vc6,编译procouttest工程,并调试运行,在如下的CreateInstance下断点,可看到该调用是成功的,也就是说成功实例化了COM组件;

BOOL CProcOutTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr = m_IObject.CreateInstance(__uuidof(Modu));
if(FAILED(hr))

...

}

进一步可查看系统中运行的进程,可看到如下2个进程。


在测试这个事情过程中,遇到2个问题,记录一下:

1.vs2010 编写atl com组件遇到编译PS工程失败的问题,具体解决办法参考:https://connect.microsoft.com/VisualStudio/feedback/details/578130/vs2010-bug-unresolved-external-symbol-proxyfileinfo

也就是说打开COM组件的第一个工程属性找到MIDL -> Target Environment" and set it to "Microsoft Windows 64-bit on x64 (/env x64)".

2.进程外组件注册方式:

要注册组件,请键入下列命令:

<path>\<mycomponent> /regserver

其中,<path> 是组件的路径,<mycomponent> 是组件的名称。

要注销组件,请键入下列命令:

<path>\<mycomponent> /unregserver

其中,<path> 是组件的路径,<mycomponent> 是组件的名称。

代码请到这里下载:

http://download.csdn.net/detail/shakesky/7166405

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值