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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章