【问题标题】:DLL resource (png) to SDL_SurfaceDLL 资源 (png) 到 SDL_Surface
【发布时间】:2012-06-03 06:01:38
【问题描述】:

我有一个函数可以将 SDL_Surface 获取到 openGL 纹理,但我似乎无法从 dll 加载图像。我可以加载一个 DLL,我只是对如何从中获取图像并从中创建 SDL 表面感到困惑。

【问题讨论】:

  • 如何将图像放入 DLL? DLL 通常包含源代码,而不是图像。
  • Windows 可执行文件和 DLL 还包含可以使用 LockResource API 作为原始内存块访问的资源。

标签: opengl dll sdl


【解决方案1】:

在 Windows 上,可以获得指向 DLL 中资源的原始指针。 FindResource/LoadResource/LockResource 函数可以完成这项工作。

使用以下代码获取指向资源 ResourceID 的指针(在 .rc 文件中查找)和 ResourceType 类型(在您的情况下为 BITMAP):

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

【讨论】:

  • 然后将 BufPtr 和 BufSize 传递给 SDL_RWFromConstMem(const void *mem, int size);获取 SDL_RWops 结构,然后将其传递给 IMG_Load_RW。非常感谢。我的资源文件将不再受到保护!!!
  • 当然,这正是我的意思 - BufPtr 和 BufSize 是图像文件的替代品。
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多