
一直糾結于微軟所謂的32位程序不能訪(fǎng)問(wèn)64位dll或64位程序不能訪(fǎng)問(wèn)32位dll,MSDN上的說(shuō)明也不能完全理解。
這兩天糾結的問(wèn)題終于需要直面了,有個(gè)項目需要轉到64位平臺上運行(需要超4G內存),但它是用VC6.0開(kāi)發(fā)的,第一反應想到下面幾個(gè)方式:
1,將VC6.0項目轉到VS2005及以上,確實(shí)這樣做了,報出一堆錯誤,真心不想debug這個(gè)了,太古老了。
2,VC6.0開(kāi)發(fā)64位程序,雖然網(wǎng)上有總總描述(安裝windows SDK 2003等等),最終還是放棄了,畢竟VC6.0太老古董了,折騰了傷不起,編譯的程序穩定性也不能保證。
3,即使真心轉成VS2005以上或VC6.0 64位開(kāi)發(fā)版,某些第三方dll是32位的,不能用了,也找不到源代碼,對方也不會(huì )再support了。
4,再寫(xiě)個(gè)64位的exe進(jìn)行進(jìn)程間交互,這種方式想想頭都炸了。
艱苦奮斗了一個(gè)通宵,使用COM組件的方式終于被我搞定了。太開(kāi)心了,激勵并留念。
具體方式轉載別人的,如下:
工作流程: 1.創(chuàng )建一個(gè)進(jìn)程外COM服務(wù)器(EXE)?! ?.將32位dll的接口函數封裝為COM服務(wù)器的相關(guān)接口?! ?.注冊COM服務(wù)器*.exe /regserver (注銷(xiāo) *.exe /unregserver)?! ?.64位進(jìn)程調用32位COM服務(wù)器接口,成功。從而曲線(xiàn)實(shí)現了64位進(jìn)程調用32位dll?! 【唧w步驟: 我首先創(chuàng )建了一個(gè)簡(jiǎn)單的dll工程,只輸出一個(gè)函數int c = add(int a,int b); 生成lib和dll 然后創(chuàng )建一個(gè)進(jìn)程外COM(EXE類(lèi)型),內部鏈接dll,添加方法Method: Add(long *c) { *c = add(1,2);}編譯生成?! ∪缓笞訡OM,*.exe /regserver 最創(chuàng )建一個(gè)64位WIN32工程驗證64位環(huán)境下方法調用是否正確,經(jīng)驗證正確?。?! 結論:以上方法可以解決64位進(jìn)程調用32位dll的問(wèn)題
聯(lián)系客服