我想在資源文件.rc中實現一個字符串表,然後使用函數CString :: LoadStringW()加載特定的字符串。 這是代碼的main.cpp:C++ visual studio資源
#ifndef _AFXDLL
#define _AFXDLL
#endif
#include <afx.h>
#include <stdio.h>
#include "resource.h"
int main()
{
printf("Code Example: Load resource file data\n");
CString sentence;
sentence.LoadStringW(IDS_STRING101);
printf("Sentence: %s", sentence);
getchar();
return 0;
}
現在已經有說明良好的聯繫,如何使用資源文件爲:
http://www.cplusplus.com/forum/windows/119338/
http://www.winprog.org/tutorial/resources.html
問題是,當我編譯代碼然後嘗試運行,它不會讀取字符串。 調試運行時,有LoadStringW行()函數拋出一個斷言錯誤:
Debug Assertion Failed!
Program: C:\WINDOWS\SYSTEM32\mfc140ud.dll
File: f:\dd\vctools\vc7libs\ship\atlmfc\include\afxwin1.inl
Line: 24
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
在我提供的是第一個網址的結尾(如最後一步)鏈接編譯資源文件.RC和我的源文件主的.cpp。 我不知道如何做到這一點,也許這就是爲什麼我的程序無法按預期工作。
請問,你有什麼建議嗎?
我正在嘗試MSVS 2015/2017.
謝謝。
你的資源文件是什麼樣的?哪條線導致斷言?爲什麼你在頂部定義了_AFXDLL? – VTT
斷言是由行'sentence.LoadStringW(IDS_STRING101);'引起的。我使用'_AFXDLL',因爲我使用MFC和運行時庫選項/ MDd。我只是編譯錯誤。但刪除這個定義和使用/ MT不會改變所描述的問題。我將在短時間內簡化資源文件並在此處提供... –
斷言實際上是由'LoadStringW'中的一些代碼觸發的。也許它顯示了一個真正的斷言點(即'assert(...)')的合適的堆棧跟蹤,因此可以確定失敗的斷言條件?另外'IDS_STRING101'的價值是什麼? 101? – VTT