2012-09-18 46 views
0

我想加載在默認Windows打印機驅動程序資源文件中使用的unired.dll。 我可以爲Windows Vista x86加載unires.dll。我可以在x86應用程序中爲x64構建加載資源庫(DLL)嗎?

它位於C:\ WINDOWS \ SYSTEM32 \閥芯\ DRIVERS \ W32X86 \ 3

但現在我使用的是Windows 7專業版64位。

因此,位於 C:\ Windows \ System32 \ spool \ drivers \ x64 \ 3中的同名unires.dll無法加載。

通過下面的代碼,GetLastError()返回193

這可能嗎?或不可能? 我使用Visual Studio 2005 Pro。嘗試構建x64和x86,但每個都失敗。

TCHAR libName[MAX_PATH]; 
wsprintf(libName , _T("unires.dll")); 

HINSTANCE hLibraryInstance = ::LoadLibrary(libName); 
DWORD ErrorId=::GetLastError(); 

std::wofstream out; 
out.open(_T("unires.txt")); 

for(UINT resKey=0;resKey<100000;resKey++) 
{ 

    TCHAR * resBuf=new TCHAR[CHAR_MAX]; 
    int BufferMaxSize=CHAR_MAX; 
    int Result=::LoadString(hLibraryInstance, resKey, resBuf, BufferMaxSize); 

    wstring resStr=resBuf; 

    if(!resStr.empty()) 
    { 
     out<<resKey; 
     out<<" "; 
     out<<resStr.c_str(); 
     out<<endl; 
    } 

    if(resBuf!=NULL) 
    { 
     delete [] resBuf; 
    } 
} 

out.close(); 

請幫幫我。 最好的問候!

+0

的可能重複的[從一個32位進程上的64位的dll調用LoadLibrary](HTTP:/ /stackoverflow.com/questions/2466637/calling-loadlibrary-on-a-64-bit-dll-from-a-32-bit-process) – CharlesB

回答

2

正如註釋鏈接中所述,無法在x86進程中加載​​x64庫。

解決方案可能是將程序移植到64位。

+1

尊敬的Mr.CharlesB。非常感謝您的建議,對我非常有幫助。我嘗試我的解決方案來端口64位。附:我不調整自己使用這個堆棧溢出系統。這是第一次使用。我可以如何感謝你的建議? – user1679588

+0

不客氣,您可以通過點擊打勾接受我的答案。當你獲得足夠的聲譽時,你也可以贊成。見http://stackoverflow.com/faq#howtoask尋求幫助 – CharlesB

+0

謝謝您的好意,Mr.CharlesB。我明白如何使用這個系統(^ _ ^)。 – user1679588

0

根據涵蓋LoadResource的MSDN文章,第一個參數應該是可選的。

對於我LoadResource生成錯誤代碼193,當我嘗試訪問位於另一個exe文件中的資源,而不傳遞hModule參數。

不起作用:就像一個魅力

HRSRC hResource = FindResource(LoadLibrary(strFileName.c_str()), MAKEINTRESOURCE(1), RT_STRING); 
HGLOBAL hResHandle = LoadResource(NULL, hResource); 

作品:

HMODULE hExe = LoadLibrary(strFileName.c_str()); 
HRSRC hResource = FindResource(hExe, MAKEINTRESOURCE(1), RT_STRING); 
HGLOBAL hResHandle = LoadResource(hExe, hResource); 
相關問題