This example loads the dynamic link module "DISPLAY.DDL," queries its address and type, and finally frees it.
#define INCL_DOSMODULEMGR /* Module Manager values */
#define INCL_DOSERRORS /* Error values */
#include <os2.h>
#include <stdio.h>
int main(VOID) {
PSZ ModuleName = "C:\\OS2\\DLL\\DISPLAY.DLL"; /* Name of module */
UCHAR LoadError[256] = ""; /* Area for Load failure information */
HMODULE ModuleHandle = NULLHANDLE; /* Module handle */
PFN ModuleAddr = 0; /* Pointer to a system function */
ULONG ModuleType = 0; /* Module type */
APIRET rc = NO_ERROR; /* Return code */
rc = DosLoadModule(LoadError, /* Failure information buffer */
sizeof(LoadError), /* Size of buffer */
ModuleName, /* Module to load */
&ModuleHandle); /* Module handle returned */
if (rc != NO_ERROR) {
printf("DosLoadModule error: return code = %u\n", rc);
return 1;
} else {
printf("Module %s loaded.\n", ModuleName);
} /* endif */
rc = DosQueryProcAddr(ModuleHandle, /* Handle to module */
1L, /* No ProcName specified */
NULL, /* ProcName (not specified) */
&ModuleAddr); /* Address returned */
if (rc != NO_ERROR) {
printf("DosQueryProcAddr error: return code = %u\n", rc);
return 1;
} else printf("Address of module is 0x%x.\n", ModuleAddr);
rc = DosQueryProcType(ModuleHandle, /* Handle to module */
1L, /* Indicate no ProcName given */
NULL, /* ProcName (not specified) */
&ModuleType); /* Type 0=16-bit 1=32-bit */
if (rc != NO_ERROR) {
printf("DosQueryProcType error: return code = %u\n", rc);
return 1;
} else printf("This is a %s module.\n", ( ModuleType ? "32-bit" : "16-bit"));
rc = DosFreeModule(ModuleHandle);
if (rc != NO_ERROR) {
printf("DosFreeModule error: return code = %u\n", rc);
return 1;
} else printf("Module %s freed.\n", ModuleName);
return NO_ERROR;
}