2012-06-03 74 views
2

我有一個函數來獲得SDL_Surface到openGL紋理,但我似乎被卡在從DLL加載圖像。我可以加載一個DLL,我只是想知道如何從中獲取圖像,並從中創建SDL表面。DLL資源(PNG)到SDL_Surface

+0

你如何獲得的圖像*成*一個DLL? DLL通常包含*源代碼*,而不是圖像。 –

+0

Windows可執行文件和DLL還包含可以使用LockResource API作爲原始內存塊訪問的資源。 –

回答

1

在Windows上,可以獲取位於DLL中的資源的原始指針。 FindResource/LoadResource/LockResource函數完成這項工作。

使用下面的代碼得到的指針資源資源ID(尋找它在rc文件)和類型的ResourceType(在你的情況下位圖):

HMODULE Handle = /// GetModuleHandle(NULL or .dll handle here); - for current .exe file or .dll 

HRSRC hResInfo; 
HGLOBAL hResource; 

// first find the resource info block 
if ((hResInfo = ::FindResource(Handle, MAKEINTRESOURCE(ResourceID), ResourceType)) == NULL) 
{ 
    return(NULL); 
} 

// determine resource size 
int BufSize = SizeofResource(Handle, hResInfo); 

// now get a handle to the resource 
if ((hResource = LoadResource(Handle, hResInfo)) == NULL) 
{ 
    return(NULL); 
} 

// finally get and return a pointer to the resource 
void* BufPtr = LockResource(hResource); 

    /// Do whatever you need with BufSize/BufPtr 
+0

然後將BufPtr和BufSize傳遞給SDL_RWFromConstMem(const void * mem,int size);獲取SDL_RWops結構,然後將其傳遞給IMG_Load_RW。非常感謝。沒有更多將我的資源文件不受保護! – user1433205

+0

當然,這正是我的意思 - BufPtr和BufSize是圖像文件的替代品。 –