2011-11-11 48 views
3

我在查找可以包含资源的文件类型列表,可以通过LoadLibrary LoadModule 函数加载。是否有可以包含资源的支持文件类型列表?

我想用LoadResource功能,其中第一个参数是句柄模块,我想知道支持什么类型的文件加载资源(可能含有的资源,并且可以通过LoadLibrary LoadModule 功能加载)。

脚注:
我正在致力于一个具有资源支持的翻译工具,并且我需要这个文件打开对话框过滤器。

感谢

回答

5

我要找的文件类型的列表,它可以包含资源,并可以通过LoadLibrary和功能的LoadModule加载。

您不应该使用LoadModule,它是为了兼容16位应用程序。 LoadLibrary用于加载库:可执行文件和DLL适合账单。由于您需要“文件打开”对话框的信息,因此我假定您最感兴趣的是适用的文件扩展名。不幸的是,这并不容易,因为EXE和DLL不一定需要EXE和DLL扩展。例如,SCR扩展名是屏幕保护程序的流行扩展,但实际文件是平面EXE。 BPL是Delphi编译包的扩展,但这些文件实际上是DLL的最多LoadLibrary

在我看来,你应该简单地过滤EXE和DLL,但让用户打开他们想要的任何东西。如果LoadLibrary失败,您只会知道它是否与LoadLibrary真正兼容。

+0

.ocx .vxd .bpl和我想还有更多的。 –

+0

+1和接受,关于'LoadModule'我错过了那个注释,无论如何,我一直只使用'LoadLibrary',我正在寻找一个可以包含资源的官方文件类型扩展,但是你说得对,我会留在'* .exe'和'* .dll' (* .exe; *。dll)| * .exe; *。dll; |所有文件(*。*)| *。*'。Thanks! – TLama

+8

Even更好的办法是使用LoadLibraryEx和LOAD_LIBRARY_AS_DATAFILE。这样你就不会执行任何可能由DllMain触发的代码。 –

1

我正在使用带有资源的dll文件。函数loadresource与loadlibrary函数一起工作正常。 例如,

.. 
var 
    LibHandle: THandle; 
    Bmp: TBitmap; 
begin 
    LibHandle := LoadLibrary(PChar('MYDLL.DLL')); 
    if LibHandle <> 0 then 
    try 
    Bitmap := Tbitmap.Create; 
    Bitmap.LoadFromResourceName(LibHandle, 'ICON16'); // ICON16 - Resource name, which contains bitmap with size 16x16 
    .. 
    except on E: exception do 
    .. 
    end; 
.. 
1

由于事实上,只要PE (COFF) specification而言,一个“可移植可执行”文件的扩展名并没有起到任何作用!即使没有扩展名的文件也可能是一个可以用LoadLibrary(Ex)加载的有效文件。正如Prund正确地说过:“如果LoadLibrary失败或者不成功,你只会知道它是否与LoadLibrary兼容......”!有可能,任何文件(甚至是一个名为myfile.doc的文件可能是一个“可执行文件”)。

相关问题