任何人都可以提供解釋或鏈接,解釋MFC資源文件中的STRINGTABLE是如何定義的,並且可以手動擴展?MFC - 手動擴展字符串表
我試圖做到這一點,但未能在多項目解決方案中這樣做。上述解決方案中的大多數項目都有自己的資源文件並重命名爲resource.h-files。
當應用程序嘗試訪問字符串資源時,顯示錯誤消息'找不到'22392'的資源字符串'。 22392是我嘗試創建的字符串的ID。 如果我使用已定義的字符串ID,則不會收到類似的錯誤消息。
使用Visual Studio 2010的嚮導來添加字符串資源也不起作用。 但它在資源符號列表和字符串表編輯器中正確顯示。
不用說,我沒有參與創建這個解決方案。
感謝您的幫助。
[EDIT1]
我通過使用值執行「查找文件」和使用其他值以及排除衝突的可能性:22390,22391,22393,22394,22395.總是有相同的結果。
[EDIT2]
我重複我在一個項目一個新的,乾淨和簡單的MFC應用程序的複雜的解決方案做的步驟,它的工作沒有問題。因此,我認爲我的問題與解決方案有多個項目和資源有關。
的步驟有以下幾條:
- 選擇在RESOURCE.H一個免費電話號碼(這是在我的情況不同的命名),增加的#define IDS_XXX 免費電話。
- 通過執行「查找文件」來驗證所選號碼。
在resource.h中向STRINGTABLE添加一行,最好靠近IDS_,其值接近我選擇的行。
STRINGTABLE BEGIN IDS_OTHER "I have a number close to XXX" IDS_XXX "HelloHello" END
訪問在該應用程序的字符串:
CString strMyString; strMyString.LoadString(IDS_XXX); AfxMessageBox(strMyString, MB_YESNO | MB_ICONEXCLAMATION);
[EDIT3]
我試圖找到加載鏈的,導致該錯誤消息的呼叫。 無法加載字符串資源的LoadString位於類中,該類與包含所述字符串資源的資源文件(.rc)位於同一項目中。在那裏生成錯誤消息'找不到'22392'的資源字符串'。這至少解釋了爲什麼我找不到任何東西。
[EDIT4]
我能原因的進一步隔離。
在cstringt.h HINST是NULL又名串的ressource無法找到:
_Check_return_ BOOL LoadString(_In_ UINT nID)
{
HINSTANCE hInst = StringTraits::FindStringResourceInstance(nID);
if(hInst == NULL)
{
return(FALSE); // goes here, but shouldn't, hInst == NULL
}
return(LoadString(hInst, nID));
}
這是奇怪的,因爲它可以在同一資源文件就好內訪問另一個字符串的ressource。
有些選項可以啓動資源的編號,並且我之前用它們來處理一組MFC擴展DLL。我認爲這些是在選項/資源...對不起,我現在沒有MSVC MFC可用... – CapelliC 2012-03-09 11:32:05
@chac:如果你建議改變現有的資源編號,這是不容置疑的,因爲這個解決方案已經發展了十多年了,如果我嘗試過這樣的事情,所有地獄都會崩潰。 – 2012-03-09 11:40:46