Jump to content

DosGetResource (OS/2 1.x)

From EDM2
Revision as of 03:26, 16 September 2017 by Martini (talk | contribs)
Legacy Function Warning
It is recommended to use a newer replacement for this function.
Replacement: DosGetResource
Remarks: This page list the older version of the function for reference.

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.
Value        Definition
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.

Example Code

C Binding

#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 Binding

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

Related Functions