您的位置:首页 > 其它

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

2014-04-09 14:07 141 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: