source: trunk/src/ole32/regsvr32.cpp@ 1036

Last change on this file since 1036 was 993, checked in by davidr, 26 years ago

Added AntiMoniker.cpp
Updated regsvr32.cpp to use new RegisterLxExe fn.

File size: 7.4 KB
Line 
1/* $Id: regsvr32.cpp,v 1.3 1999-09-20 20:38:20 davidr Exp $ */
2/*
3 *
4 * Project Odin Software License can be found in LICENSE.TXT
5 *
6 */
7/*
8 * RegSvr32 for OS/2
9 *
10 * 1/9/99
11 *
12 * Copyright 1999 David J. Raison
13 *
14 */
15
16#include <windows.h>
17#include <odinlx.h>
18#include <stdarg.h>
19#include <stdio.h>
20#include <string.h>
21#include <ctype.h>
22
23
24// ======================================================================
25// Local Data
26// ======================================================================
27static int fRegister = 1;
28static int fSilent = 0;
29static char szFile[1024];
30static HANDLE hdlObject;
31
32// ======================================================================
33// Prototypes.
34// ======================================================================
35extern HRESULT WIN32API OleInitialize(LPVOID reserved);
36extern HRESULT WIN32API OleUninitialize(void);
37
38static HRESULT parse_command(int argc, char * argv[]);
39static HRESULT load_object(void);
40static HRESULT register_object(void);
41static HRESULT deregister_object(void);
42static HRESULT unload_object(void);
43static HRESULT sign_on(void);
44static HRESULT sign_off(void);
45static HRESULT report_msg(char * fmt, ...);
46static HRESULT report_err(HRESULT hr, char * fmt, ...);
47static HRESULT usage(char * fmt, ...);
48static int WIN32API EntryPoint(HINSTANCE hInstance, HINSTANCE hPrevInstance,
49 LPSTR lpCmdLine, int nCmdShow);
50
51// ======================================================================
52// Public API's
53// ======================================================================
54
55// ----------------------------------------------------------------------
56// main
57// ----------------------------------------------------------------------
58int main(int argc, char *argv[])
59{
60 RegisterLxExe(EntryPoint, NULL);
61
62 HRESULT hr;
63
64 if((hr = sign_on()) != S_OK)
65 return hr;
66
67 if((hr = parse_command(argc, argv)) != S_OK)
68 return hr;
69
70 if((hr = load_object()) != S_OK)
71 return hr;
72
73 if (fRegister)
74 hr = register_object();
75 else
76 hr = deregister_object();
77
78 if (hr != S_OK)
79 return hr;
80
81 if((hr = unload_object()) != S_OK)
82 return hr;
83
84 return sign_off();
85}
86
87// ======================================================================
88// Private functions.
89// ======================================================================
90
91// ----------------------------------------------------------------------
92// EntryPoint
93// ----------------------------------------------------------------------
94static int WIN32API EntryPoint
95 (HINSTANCE hInstance,
96 HINSTANCE hPrevInstance,
97 LPSTR lpCmdLine,
98 int nCmdShow)
99{
100 return S_OK;
101}
102
103// ----------------------------------------------------------------------
104// sign_on
105// ----------------------------------------------------------------------
106static HRESULT sign_on(void)
107{
108 HRESULT hr;
109
110 hr = OleInitialize(NULL);
111 if (hr != S_OK)
112 return report_err(hr, "Error initialising OLE");
113
114 return S_OK;
115}
116
117// ----------------------------------------------------------------------
118// sign_off
119// ----------------------------------------------------------------------
120static HRESULT sign_off(void)
121{
122 OleUninitialize();
123 return report_msg("%s initialised OK", szFile);
124}
125
126// ----------------------------------------------------------------------
127// parse_command
128// ----------------------------------------------------------------------
129static HRESULT parse_command(int argc, char * argv[])
130{
131 int ii;
132 char * pArg;
133
134 // Initial conditions.
135 fRegister = 1;
136 fSilent = 0;
137 szFile[0] = 0;
138
139 // Loop through args...
140 for (ii = 1; ii < argc; ii++)
141 {
142 pArg = argv[ii];
143
144 if ((pArg[0] == '-') || (pArg[0] == '/'))
145 {
146 switch(toupper(pArg[1]))
147 {
148 case 'S':
149 {
150 fSilent = 1;
151 break;
152 }
153
154 case 'U':
155 {
156 fRegister = 0;
157 break;
158 }
159
160 default:
161 {
162 return usage("Unknown switch '%c'", pArg[1] );
163 }
164 }
165 }
166 else if (strlen(szFile) == 0)
167 {
168 strcpy(szFile, pArg);
169 }
170 else
171 {
172 return usage("Too many files specified");
173 }
174 }
175 if (strlen(szFile) == 0)
176 return usage("No file specified");
177
178 return S_OK;
179}
180
181// ----------------------------------------------------------------------
182// load_object
183// ----------------------------------------------------------------------
184static HRESULT load_object(void)
185{
186 hdlObject = CoLoadLibrary(szFile, 1);
187 if (hdlObject == 0)
188 return report_err(S_FALSE, "Failed to load '%s'", szFile);
189
190 return S_OK;
191}
192
193// ----------------------------------------------------------------------
194// register_object
195// ----------------------------------------------------------------------
196static HRESULT register_object(void)
197{
198 typedef HRESULT(*LPFNREGISTER)(void);
199
200 LPFNREGISTER pfnRegister;
201 HRESULT hr;
202
203 pfnRegister = (LPFNREGISTER)GetProcAddress(hdlObject, "DllRegisterServer");
204
205 if (pfnRegister == NULL)
206 return report_err(S_FALSE, "Unable to locate registration entry point in '%s'", szFile);
207
208 hr = pfnRegister();
209 if (hr != S_OK)
210 return report_err(hr, "Registration for '%s' returned error 0x%08lx", szFile, hr);
211
212 return S_OK;
213}
214
215// ----------------------------------------------------------------------
216// deregister_object
217// ----------------------------------------------------------------------
218static HRESULT deregister_object(void)
219{
220 typedef HRESULT(*LPFNUNREGISTER)(void);
221
222 LPFNUNREGISTER pfnUnregister;
223 HRESULT hr;
224
225 pfnUnregister = (LPFNUNREGISTER)GetProcAddress(hdlObject, "DllUnregisterServer");
226
227 if (pfnUnregister == NULL)
228 return report_err(S_FALSE, "Unable to locate unregistration entry point in '%s'", szFile);
229
230 hr = pfnUnregister();
231 if (hr != S_OK)
232 return report_err(hr, "Unregistration for '%s' returned error 0x%08lx", szFile, hr);
233
234 return S_OK;
235}
236
237// ----------------------------------------------------------------------
238// unload_object
239// ----------------------------------------------------------------------
240static HRESULT unload_object(void)
241{
242 CoFreeLibrary(hdlObject);
243 return S_OK;
244}
245
246// ----------------------------------------------------------------------
247// report_msg
248// ----------------------------------------------------------------------
249static HRESULT report_msg(char * fmt, ...)
250{
251 if (!fSilent)
252 {
253 va_list va_ptr;
254 HWND hwnd = GetDesktopWindow();
255 char text[1024];
256
257 va_start(va_ptr, fmt);
258 vsprintf(text, fmt, va_ptr);
259 va_end(va_ptr);
260
261 MessageBoxA(hwnd, text, "RegSvr32", MB_OK | MB_ICONINFORMATION);
262 }
263 return S_OK;
264}
265
266// ----------------------------------------------------------------------
267// report_err
268// ----------------------------------------------------------------------
269static HRESULT report_err(HRESULT hr, char * fmt, ...)
270{
271 va_list va_ptr;
272 HWND hwnd = GetDesktopWindow();
273 char text[1024];
274
275 va_start(va_ptr, fmt);
276 vsprintf(text, fmt, va_ptr);
277 va_end(va_ptr);
278
279 MessageBoxA(hwnd, text, "RegSvr32", MB_OK | MB_ICONERROR);
280
281 return hr;
282}
283
284// ----------------------------------------------------------------------
285// usage
286// ----------------------------------------------------------------------
287static HRESULT usage(char * fmt, ...)
288{
289 va_list va_ptr;
290 HWND hwnd = GetDesktopWindow();
291 char text[256];
292 char msg[1024];
293
294 va_start(va_ptr, fmt);
295 vsprintf(text, fmt, va_ptr);
296 va_end(va_ptr);
297 sprintf(msg, "Error - %s\n\n"
298 "Usage:\n"
299 "regsvr32 [/s] [/u] filename\n"
300 "where\n"
301 "/s - silent completion\n"
302 "/u - unregister", text);
303
304 MessageBoxA(hwnd, msg, "RegSvr32", MB_OK | MB_ICONWARNING);
305
306 return S_FALSE;
307}
Note: See TracBrowser for help on using the repository browser.