MFC中FindResource如何獲取自定義資源

2021-08-24 23:04:59 字數 1688 閱讀 2320

在.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 ...