有没有支持资源的文件类型列表?

3
我正在寻找一份包含资源并可以由LoadLibraryLoadModule函数加载的文件类型列表。
我想使用LoadResource函数来加载资源,其中第一个参数是模块句柄,我想知道哪些文件类型受支持(可能包含资源,并且可以被LoadLibraryLoadModule函数加载)。
注:我正在开发一种带有资源支持的翻译工具,我需要这个来作为文件打开对话框筛选器。
谢谢
3个回答

5
我正在寻找一份可以包含资源并且可以被LoadLibrary和LoadModule函数加载的文件类型列表。
你不应该使用LoadModule,它仅适用于与16位应用程序兼容。LoadLibrary则用于加载库:可执行文件和DLL均符合要求。由于您需要此信息以打开文件对话框,我假设您主要感兴趣的是适用的文件扩展名。不幸的是,这不容易确定,因为EXE和DLL不一定需要具有EXE和DLL扩展名。例如,SCR扩展名是屏幕保护程序的常见扩展名,但实际文件是标准EXE格式。BPL是Delphi编译的包的扩展名,但这些文件实际上是DLL(就LoadLibrary而言)。
在我看来,您应该简单地过滤EXE和DLL,但允许用户打开任何他们想打开的文件。只有当LoadLibrary失败或被调用时,您才会知道它是否真正兼容。

.ocx、.vxd、.bpl,我猜还有更多。 - David Heffernan
+1并接受,关于LoadModule我错过了那个注释,谢谢。无论如何,我一直在使用LoadLibrary。我正在寻找官方文件类型扩展名,可以包含资源,但你是对的,我会保留*.exe*.dll默认过滤器。所以我用这个过滤器简单地解决了这个问题:二进制文件(*.exe;*.dll)|*.exe;*.dll;|所有文件(*.*)|*.*。谢谢! - TLama
8
更好的做法是使用LoadLibraryEx和LOAD_LIBRARY_AS_DATAFILE一起使用。这样,您就不会执行任何由DllMain触发的代码。 - Mihai Nita

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)规范而言,“可移植可执行文件”的扩展名并不起任何作用!甚至没有扩展名的文件也可能是一个有效的文件,可以使用LoadLibrary(Ex)加载。正如Prund所说:“只有在LoadLibrary失败或成功时,你才会知道它是否真正与LoadLibrary兼容。”潜在地,任何文件(甚至命名为myfile.doc的文件)都可能是一个“可执行文件”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接