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
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
相关文章推荐
- Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法
- 【转】Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法(DLL)
- Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法
- Delphi7程序调用C#写的DLL解决办法(DLL)
- 用Labview调用两个相机采集图像程序以及出现串图问题的解决办法
- Mongo.exe 无法定位程序输入点terminate于动态链接库 *.dll的解决办法
- C#调用dll提示"试图加载格式不正确的程序"解决方法(转)
- Android 通过Intent调用系统拍照程序出现图片太小的问题解决办法
- VS2010使用C#调用C++编写的dll,在其他电脑上无法运行的解决办法
- Oracle 11g 64bit下程序报ORA-12541: TNS: 无监听程序解决办法
- Android:调用其他程序中的activity和Permission Denial: starting Intent 错误解决办法
- BizTalk调用.net程序,找不到程序集的解决办法
- 关于winserver2012运行c++程序缺少dll的原因,而且c++运行时程序安装失败的解决办法
- 关于java程序调用oracle数据库中存储过程和function的解决办法