2012-06-20 81 views
0

我有一個項目,爲了MUI的目的,在資源DLL中嵌入了一些圖標,位圖和字符串。這些在Windows 7中都工作得很好,但只有字符串和位圖可以在XP中運行。我使用VS2012在Windows 7上構建應用程序,並使用Visual Studio 2010(v100)作爲實際工具集。如何在Windows 7和XP之間共享包含圖標的資源DLL?

由於MUI本身不支持在XP上,我編程獲取基於步驟5.1c和5.2的this article on MSDN的相應資源DLL的句柄。

GetLastError函數後,我嘗試了我的圖標的LoadImage從我的XP資源的結果是1813,或ERROR_RESOURCE_TYPE_NOT_FOUND。在同一個資源句柄上爲LoadImage調用位圖或LoadString可以正常工作,事實上,我的字符串和位圖在適當的位置顯示。

事情我已經注意到了:如果我試圖打開我的應用程序的DLL的Windows 7設置的快捷方式的圖標沒有問題,但是Windows XP報告的文件不包含任何圖標。如果我將它們複製過來,XP沒有問題,所以我不認爲它們的格式不正確,除非資源編譯器以某種方式破壞它們。如果我在資源編輯器中查看圖標,它應該會顯示爲16x16 32位BMP文件。

回答

1

我的問題是由VS2012某種程度上造成的。我不確定在VS2010中使用VS2010工具構建資源DLL與使用VS2010工具在VS2012中構建它們之間有什麼區別,但有一個。

+0

感謝您發佈解釋。 – arx

1

當你創建一個MUI解決您的資源在語言無關的DLL之間的分裂(它通常包含圖標,清單等)和特定語言的DLL(通常包含字符串,對話框等)

MSDN:「在Windows Vista之前的資源加載功能(如加載鏈,LoadIcon,LoadBitmap,的FormatMessage,和其他人)是不知道MUI。」

你的字符串和圖標可能不會在同一個DLL,而XP將無法去尋找他們。我鏈接到的文章解釋瞭如何使MUI在Windows XP上工作。

+0

他們不知道阿梅,但如果一個句柄傳遞他們到一個特定語言的DLL他們仍然工作(我會更新更多的信息關於如何獲取該句柄的問題)。我已經證實,這對於字符串和位圖來說是有效的。只有那些沒有出現的圖標(所有這些圖標都被設置爲區域特定的)。我已經證實,除了MUI和manifest部分之外,在語言中立的DLL或主要的exe文件中沒有資源,所以我的特定於語言環境的DLL正在被加載,但有些圖標部分並不正確。 –

+0

@MilesStrombach:夠公平的。圖標如何編碼? Windows Vista引入了對包含PNG編碼數據的圖標的支持。你說圖標文件在XP上工作,但也許資源編譯器將它們壓縮成PNG?資源編輯器是否告訴你DLL中圖標的格式是什麼?如果沒有,請在資源編輯器中打開DLL,將圖標另存爲.ico,在記事本中打開並查看它是否包含字母「PNG」。 – arx

+0

我使用了幾個不同的資源提取器,並且他們提取的所有圖標都看起來像32位BMP,並且缺少PNG頭。 –

相關問題