source: trunk/src/shell32/initterm.cpp@ 2012

Last change on this file since 2012 was 1252, checked in by sandervl, 26 years ago

Added version info, compile resource with wrc (shell about fixed), call Wine dll entrypoint

File size: 4.1 KB
Line 
1/* $Id: initterm.cpp,v 1.9 1999-10-11 20:17:10 sandervl Exp $ */
2
3/*
4 * DLL entry point
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1998 Peter Fitzsimmons
8 *
9 *
10 * Project Odin Software License can be found in LICENSE.TXT
11 *
12 */
13
14/*-------------------------------------------------------------*/
15/* INITERM.C -- Source for a custom dynamic link library */
16/* initialization and termination (_DLL_InitTerm) */
17/* function. */
18/* */
19/* When called to perform initialization, this sample function */
20/* gets storage for an array of integers, and initializes its */
21/* elements with random integers. At termination time, it */
22/* frees the array. Substitute your own special processing. */
23/*-------------------------------------------------------------*/
24
25
26/* Include files */
27#define INCL_DOSMODULEMGR
28#define INCL_DOSPROCESS
29#include <os2wrap.h> //Odin32 OS/2 api wrappers
30#include <stdlib.h>
31#include <stdio.h>
32#include <string.h>
33#include <odin.h>
34#include <win32type.h>
35#include <odinlx.h>
36#include <misc.h> /*PLF Wed 98-03-18 23:18:15*/
37
38extern "C" {
39void CDECL _ctordtorInit( void );
40void CDECL _ctordtorTerm( void );
41}
42
43extern "C" {
44 //Win32 resource table (produced by wrc)
45 extern DWORD _Resource_PEResTab;
46}
47
48BOOL WINAPI Shell32LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad);
49
50/*-------------------------------------------------------------------*/
51/* A clean up routine registered with DosExitList must be used if */
52/* runtime calls are required and the runtime is dynamically linked. */
53/* This will guarantee that this clean up routine is run before the */
54/* library DLL is terminated. */
55/*-------------------------------------------------------------------*/
56static void APIENTRY cleanup(ULONG reason);
57
58
59/****************************************************************************/
60/* _DLL_InitTerm is the function that gets called by the operating system */
61/* loader when it loads and frees this DLL for each process that accesses */
62/* this DLL. However, it only gets called the first time the DLL is loaded */
63/* and the last time it is freed for a particular process. The system */
64/* linkage convention MUST be used because the operating system loader is */
65/* calling this function. */
66/****************************************************************************/
67unsigned long SYSTEM _DLL_InitTerm(unsigned long hModule, unsigned long
68 ulFlag)
69{
70 size_t i;
71 APIRET rc;
72
73 /*-------------------------------------------------------------------------*/
74 /* If ulFlag is zero then the DLL is being loaded so initialization should */
75 /* be performed. If ulFlag is 1 then the DLL is being freed so */
76 /* termination should be performed. */
77 /*-------------------------------------------------------------------------*/
78
79 switch (ulFlag) {
80 case 0 :
81 _ctordtorInit();
82
83 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/
84
85 /*******************************************************************/
86 /* A DosExitList routine must be used to clean up if runtime calls */
87 /* are required and the runtime is dynamically linked. */
88 /*******************************************************************/
89
90 if(RegisterLxDll(hModule, Shell32LibMain, (PVOID)&_Resource_PEResTab) == FALSE)
91 return 0UL;
92
93 rc = DosExitList(0x0000F000|EXLST_ADD, cleanup);
94 if(rc)
95 return 0UL;
96
97 break;
98 case 1 :
99 UnregisterLxDll(hModule);
100 break;
101 default :
102 return 0UL;
103 }
104
105 /***********************************************************/
106 /* A non-zero value must be returned to indicate success. */
107 /***********************************************************/
108 return 1UL;
109}
110
111
112static void APIENTRY cleanup(ULONG ulReason)
113{
114 _ctordtorTerm();
115 DosExitList(EXLST_EXIT, cleanup);
116 return ;
117}
Note: See TracBrowser for help on using the repository browser.