在.exe中可以這樣新增和訪問:
1,新增資料/資源:
在resource(資源)中 通過 「add resource -> import...」選擇需要新增的 資料/資源,其中的 resource type 可以自己命名,
需要注意的是需要利用字串命名,譬如可以為"myrestype",資源id可以為字串,譬如為"idr_data",也可以使id譬如為idr_data,這兩種方式在使用findresource函式是有所區別。
2,訪問資料/資源:
在.exe中當前load的resource即為.exe中的resource,因此在使用findresource,loadresource時,引數hmodule可以為null。具體使用如下:
// string 方式
hrsrc hr = ::findresource(null,l"idr_haarcascade",l"myrestype");
if (null == hr)
ulong nressize = ::sizeofresource(null,hr); // data size/length
hglobal hg= ::loadresource(null, hr);
if (null == hg || nressize <= 0)
lpbyte pdata = (lpbyte)lockresource(hg); // data ptr
// id方式
cstring stritem = makeintresource(idr_haarcascade);
hrsrc hr = ::findresource(null,stritem,l"myrestype");
if (null == hr)
ulong nressize = ::sizeofresource(null,hr); // data size/length
hglobal hg= ::loadresource(null, hr);
if (null == hg || nressize <= 0)
lpbyte pdata = (lpbyte)lockresource(hg); // data ptr
上述方法在dll中會出現錯誤,通過getlasterror會得到錯誤碼0x00000715 ,通過error lookup 可以發現是 「找不到映像檔案中指定的型別」,這是因為此時defaultresource是load此dll的.exe中的resource,需要設定為dll中的resource方可訪問。
具體為:
hmodule ghmodule = getmodulehandle(l"test.dll");
hrsrc hr = ::findresource(ghmodule,l"idr_data",l"myrestype");
if (null == hr)
ulong nressize = ::sizeofresource(ghmodule,hr);
hglobal hg= ::loadresource(ghmodule, hr);
if (null == hg || nressize <= 0)
lpbyte pdata = (lpbyte)lockresource(hg);
在EXE和DLL中,FindResource的區別
在exe和dll中,findresource的區別 以下的 在exe中,執行無誤。可是在dll中findresource返回的值就為0了,我用 getlasterror 得出的值是1813,也就是取不到資源,這是為什麼?bool extractfile char szzlibfile,dword d...
MFC中獲取指標
獲取工具條的指標 在預設狀態下,有乙個預設的工具條afx idw 我們可以根據相應的id去獲取工具條指標,方法如下 c p c afxgetmainwnd getdescendantwindow afx idw 是不是很簡單?獲取狀態條的指標 在預設狀態下,有乙個預設的狀態條afx idw stat...
MFC中Cedit控制項
為了讓cedit控制項顯示聊天資訊,像求求一樣展現出來,要提前設定 1 vertical scroll bar 設定為 true,顯示垂直滾動條 2 visible 設定為 true 3 want true 設定為 true 4 multiline 設定為 true 將cedit控制項新增變數為m ...