DosGetResource (OS/2 1.x)

From EDM2
Revision as of 23:25, 25 January 2020 by Ak120 (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This call returns the segment selector of the specified resource segment.

Syntax

DosGetResource (ModHandle, TypeID, NameID, Selector)

Parameters

ModHandle (HMODULE) - input
The location of the resource segment.
0 - The executable file of the current process.
<> 0 - A handle to a dynamic link module returned by DosLoadModule.
TypeID (USHORT) - input 
A 16 bit resource type ID (see Remarks).
NameID (USHORT) - input 
A 16 bit resource name ID (see Remarks).
Selector (PSEL) - output 
The address of a word where the resource segment selector is returned.

Return Code

rc (USHORT) - return
Return code descriptions are:
  • 0 NO_ERROR
  • 6 ERROR_INVALID_HANDLE

Remarks

Resource segments are read-only data segments that can be accessed dynamically at run time. The access key consists of two 16-bit numbers, the first of which is a type ID and the second, a name ID. These numbers are similar in concept to the file extension and file name portions of a file name.

The advantage of resource segments is that they can be bundled into an application's executable file, so a single file contains all of the code and data for an application.

It is recommended that resource segments obtained through DosGetResource only be freed using DosFreeSeg.

OS/2 Version 1.2 added two new functions, DosGetResource2 and DosFreeResource, to load and free an application specific resource. DosGetResource2 returns a far pointer to a resource rather than the selector returned via DosGetResource. It is recommended that applications targeted for OS/2 1.2 use DosGetResource2 and DosFreeResource. Applications that wish to execute on OS/2 1.1 and 1.2 should use the OS/2 run-time dynamic link capabilities, DosLoadModule and DosGetProcAddr, to get the address of DosGetResource2 and DosFreeResource when executing on OS/2 1.2. If the DosGetProcAddr call to obtain the address of DosGetResource2 and DosFreeResource fails, the application can call DosGetResource and DosFreeSeg. Applications that use DosGetResource2 and DosFreeResource allow OS/2 to optimize memory allocation associated with the applications resource.

Bindings

C

#define INCL_DOSRESOURCES

USHORT  rc = DosGetResource(ModHandle, TypeID, NameID, Selector);

HMODULE ModHandle;     /* Module handle to get resource from */
USHORT  TypeID;        /* 16 bit resource type ID */
USHORT  NameID;        /* 16 bit resource name ID */
PSEL    Selector;      /* where to return selector */

USHORT  rc;            /* return code */

MASM

EXTRN  DosGetResource:FAR
INCL_DOSRESOURCES   EQU 1

PUSH   WORD    ModHandle    ;Module handle to get resource from
PUSH   WORD    TypeID       ;16 bit resource type ID
PUSH   WORD    NameID       ;16 bit resource name ID
PUSH@  WORD    Selector     ;Resource selector (returned)
CALL   DosGetResource

Returns WORD