1*48a54d36SAndroid Build Coastguard Worker /* -*- Mode: C; tab-width: 4 -*-
2*48a54d36SAndroid Build Coastguard Worker *
3*48a54d36SAndroid Build Coastguard Worker * Copyright (c) 2009 Apple Computer, Inc. All rights reserved.
4*48a54d36SAndroid Build Coastguard Worker *
5*48a54d36SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*48a54d36SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*48a54d36SAndroid Build Coastguard Worker * You may obtain a copy of the License at
8*48a54d36SAndroid Build Coastguard Worker *
9*48a54d36SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*48a54d36SAndroid Build Coastguard Worker *
11*48a54d36SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*48a54d36SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*48a54d36SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*48a54d36SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*48a54d36SAndroid Build Coastguard Worker * limitations under the License.
16*48a54d36SAndroid Build Coastguard Worker */
17*48a54d36SAndroid Build Coastguard Worker
18*48a54d36SAndroid Build Coastguard Worker
19*48a54d36SAndroid Build Coastguard Worker
20*48a54d36SAndroid Build Coastguard Worker
21*48a54d36SAndroid Build Coastguard Worker
22*48a54d36SAndroid Build Coastguard Worker #include "stdafx.h"
23*48a54d36SAndroid Build Coastguard Worker
24*48a54d36SAndroid Build Coastguard Worker #include "resource.h"
25*48a54d36SAndroid Build Coastguard Worker
26*48a54d36SAndroid Build Coastguard Worker #include "DLLX.h"
27*48a54d36SAndroid Build Coastguard Worker
28*48a54d36SAndroid Build Coastguard Worker #include "dlldatax.h"
29*48a54d36SAndroid Build Coastguard Worker
30*48a54d36SAndroid Build Coastguard Worker #include <DebugServices.h>
31*48a54d36SAndroid Build Coastguard Worker
32*48a54d36SAndroid Build Coastguard Worker
33*48a54d36SAndroid Build Coastguard Worker
34*48a54d36SAndroid Build Coastguard Worker
35*48a54d36SAndroid Build Coastguard Worker
36*48a54d36SAndroid Build Coastguard Worker class CDLLComponentModule : public CAtlDllModuleT< CDLLComponentModule >
37*48a54d36SAndroid Build Coastguard Worker
38*48a54d36SAndroid Build Coastguard Worker {
39*48a54d36SAndroid Build Coastguard Worker
40*48a54d36SAndroid Build Coastguard Worker public :
41*48a54d36SAndroid Build Coastguard Worker
42*48a54d36SAndroid Build Coastguard Worker DECLARE_LIBID(LIBID_Bonjour)
43*48a54d36SAndroid Build Coastguard Worker
44*48a54d36SAndroid Build Coastguard Worker DECLARE_REGISTRY_APPID_RESOURCEID(IDR_DLLX, "{56608F9C-223B-4CB6-813D-85EDCCADFB4B}")
45*48a54d36SAndroid Build Coastguard Worker
46*48a54d36SAndroid Build Coastguard Worker };
47*48a54d36SAndroid Build Coastguard Worker
48*48a54d36SAndroid Build Coastguard Worker
49*48a54d36SAndroid Build Coastguard Worker
50*48a54d36SAndroid Build Coastguard Worker CDLLComponentModule _AtlModule;
51*48a54d36SAndroid Build Coastguard Worker
52*48a54d36SAndroid Build Coastguard Worker
53*48a54d36SAndroid Build Coastguard Worker
54*48a54d36SAndroid Build Coastguard Worker
55*48a54d36SAndroid Build Coastguard Worker
56*48a54d36SAndroid Build Coastguard Worker #ifdef _MANAGED
57*48a54d36SAndroid Build Coastguard Worker
58*48a54d36SAndroid Build Coastguard Worker #pragma managed(push, off)
59*48a54d36SAndroid Build Coastguard Worker
60*48a54d36SAndroid Build Coastguard Worker #endif
61*48a54d36SAndroid Build Coastguard Worker
62*48a54d36SAndroid Build Coastguard Worker
63*48a54d36SAndroid Build Coastguard Worker
64*48a54d36SAndroid Build Coastguard Worker // DLL Entry Point
65*48a54d36SAndroid Build Coastguard Worker
DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)66*48a54d36SAndroid Build Coastguard Worker extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
67*48a54d36SAndroid Build Coastguard Worker
68*48a54d36SAndroid Build Coastguard Worker {
69*48a54d36SAndroid Build Coastguard Worker
70*48a54d36SAndroid Build Coastguard Worker debug_initialize( kDebugOutputTypeWindowsDebugger );
71*48a54d36SAndroid Build Coastguard Worker debug_set_property( kDebugPropertyTagPrintLevel, kDebugLevelVerbose );
72*48a54d36SAndroid Build Coastguard Worker
73*48a54d36SAndroid Build Coastguard Worker
74*48a54d36SAndroid Build Coastguard Worker
75*48a54d36SAndroid Build Coastguard Worker #ifdef _MERGE_PROXYSTUB
76*48a54d36SAndroid Build Coastguard Worker
77*48a54d36SAndroid Build Coastguard Worker if (!PrxDllMain(hInstance, dwReason, lpReserved))
78*48a54d36SAndroid Build Coastguard Worker
79*48a54d36SAndroid Build Coastguard Worker return FALSE;
80*48a54d36SAndroid Build Coastguard Worker
81*48a54d36SAndroid Build Coastguard Worker #endif
82*48a54d36SAndroid Build Coastguard Worker
83*48a54d36SAndroid Build Coastguard Worker hInstance;
84*48a54d36SAndroid Build Coastguard Worker
85*48a54d36SAndroid Build Coastguard Worker return _AtlModule.DllMain(dwReason, lpReserved);
86*48a54d36SAndroid Build Coastguard Worker
87*48a54d36SAndroid Build Coastguard Worker }
88*48a54d36SAndroid Build Coastguard Worker
89*48a54d36SAndroid Build Coastguard Worker
90*48a54d36SAndroid Build Coastguard Worker
91*48a54d36SAndroid Build Coastguard Worker #ifdef _MANAGED
92*48a54d36SAndroid Build Coastguard Worker
93*48a54d36SAndroid Build Coastguard Worker #pragma managed(pop)
94*48a54d36SAndroid Build Coastguard Worker
95*48a54d36SAndroid Build Coastguard Worker #endif
96*48a54d36SAndroid Build Coastguard Worker
97*48a54d36SAndroid Build Coastguard Worker
98*48a54d36SAndroid Build Coastguard Worker
99*48a54d36SAndroid Build Coastguard Worker
100*48a54d36SAndroid Build Coastguard Worker
101*48a54d36SAndroid Build Coastguard Worker
102*48a54d36SAndroid Build Coastguard Worker
103*48a54d36SAndroid Build Coastguard Worker
104*48a54d36SAndroid Build Coastguard Worker
105*48a54d36SAndroid Build Coastguard Worker // Used to determine whether the DLL can be unloaded by OLE
106*48a54d36SAndroid Build Coastguard Worker
DllCanUnloadNow(void)107*48a54d36SAndroid Build Coastguard Worker STDAPI DllCanUnloadNow(void)
108*48a54d36SAndroid Build Coastguard Worker
109*48a54d36SAndroid Build Coastguard Worker {
110*48a54d36SAndroid Build Coastguard Worker
111*48a54d36SAndroid Build Coastguard Worker #ifdef _MERGE_PROXYSTUB
112*48a54d36SAndroid Build Coastguard Worker
113*48a54d36SAndroid Build Coastguard Worker HRESULT hr = PrxDllCanUnloadNow();
114*48a54d36SAndroid Build Coastguard Worker
115*48a54d36SAndroid Build Coastguard Worker if (hr != S_OK)
116*48a54d36SAndroid Build Coastguard Worker
117*48a54d36SAndroid Build Coastguard Worker return hr;
118*48a54d36SAndroid Build Coastguard Worker
119*48a54d36SAndroid Build Coastguard Worker #endif
120*48a54d36SAndroid Build Coastguard Worker
121*48a54d36SAndroid Build Coastguard Worker return _AtlModule.DllCanUnloadNow();
122*48a54d36SAndroid Build Coastguard Worker
123*48a54d36SAndroid Build Coastguard Worker }
124*48a54d36SAndroid Build Coastguard Worker
125*48a54d36SAndroid Build Coastguard Worker
126*48a54d36SAndroid Build Coastguard Worker
127*48a54d36SAndroid Build Coastguard Worker
128*48a54d36SAndroid Build Coastguard Worker
129*48a54d36SAndroid Build Coastguard Worker // Returns a class factory to create an object of the requested type
130*48a54d36SAndroid Build Coastguard Worker
DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID * ppv)131*48a54d36SAndroid Build Coastguard Worker STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
132*48a54d36SAndroid Build Coastguard Worker
133*48a54d36SAndroid Build Coastguard Worker {
134*48a54d36SAndroid Build Coastguard Worker
135*48a54d36SAndroid Build Coastguard Worker #ifdef _MERGE_PROXYSTUB
136*48a54d36SAndroid Build Coastguard Worker
137*48a54d36SAndroid Build Coastguard Worker if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
138*48a54d36SAndroid Build Coastguard Worker
139*48a54d36SAndroid Build Coastguard Worker return S_OK;
140*48a54d36SAndroid Build Coastguard Worker
141*48a54d36SAndroid Build Coastguard Worker #endif
142*48a54d36SAndroid Build Coastguard Worker
143*48a54d36SAndroid Build Coastguard Worker return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
144*48a54d36SAndroid Build Coastguard Worker
145*48a54d36SAndroid Build Coastguard Worker }
146*48a54d36SAndroid Build Coastguard Worker
147*48a54d36SAndroid Build Coastguard Worker
148*48a54d36SAndroid Build Coastguard Worker
149*48a54d36SAndroid Build Coastguard Worker
150*48a54d36SAndroid Build Coastguard Worker
151*48a54d36SAndroid Build Coastguard Worker // DllRegisterServer - Adds entries to the system registry
152*48a54d36SAndroid Build Coastguard Worker
DllRegisterServer(void)153*48a54d36SAndroid Build Coastguard Worker STDAPI DllRegisterServer(void)
154*48a54d36SAndroid Build Coastguard Worker
155*48a54d36SAndroid Build Coastguard Worker {
156*48a54d36SAndroid Build Coastguard Worker
157*48a54d36SAndroid Build Coastguard Worker // registers object, typelib and all interfaces in typelib
158*48a54d36SAndroid Build Coastguard Worker
159*48a54d36SAndroid Build Coastguard Worker HRESULT hr = _AtlModule.DllRegisterServer();
160*48a54d36SAndroid Build Coastguard Worker
161*48a54d36SAndroid Build Coastguard Worker #ifdef _MERGE_PROXYSTUB
162*48a54d36SAndroid Build Coastguard Worker
163*48a54d36SAndroid Build Coastguard Worker if (FAILED(hr))
164*48a54d36SAndroid Build Coastguard Worker
165*48a54d36SAndroid Build Coastguard Worker return hr;
166*48a54d36SAndroid Build Coastguard Worker
167*48a54d36SAndroid Build Coastguard Worker hr = PrxDllRegisterServer();
168*48a54d36SAndroid Build Coastguard Worker
169*48a54d36SAndroid Build Coastguard Worker #endif
170*48a54d36SAndroid Build Coastguard Worker
171*48a54d36SAndroid Build Coastguard Worker return hr;
172*48a54d36SAndroid Build Coastguard Worker
173*48a54d36SAndroid Build Coastguard Worker }
174*48a54d36SAndroid Build Coastguard Worker
175*48a54d36SAndroid Build Coastguard Worker
176*48a54d36SAndroid Build Coastguard Worker
177*48a54d36SAndroid Build Coastguard Worker
178*48a54d36SAndroid Build Coastguard Worker
179*48a54d36SAndroid Build Coastguard Worker // DllUnregisterServer - Removes entries from the system registry
180*48a54d36SAndroid Build Coastguard Worker
DllUnregisterServer(void)181*48a54d36SAndroid Build Coastguard Worker STDAPI DllUnregisterServer(void)
182*48a54d36SAndroid Build Coastguard Worker
183*48a54d36SAndroid Build Coastguard Worker {
184*48a54d36SAndroid Build Coastguard Worker
185*48a54d36SAndroid Build Coastguard Worker HRESULT hr = _AtlModule.DllUnregisterServer();
186*48a54d36SAndroid Build Coastguard Worker
187*48a54d36SAndroid Build Coastguard Worker #ifdef _MERGE_PROXYSTUB
188*48a54d36SAndroid Build Coastguard Worker
189*48a54d36SAndroid Build Coastguard Worker if (FAILED(hr))
190*48a54d36SAndroid Build Coastguard Worker
191*48a54d36SAndroid Build Coastguard Worker return hr;
192*48a54d36SAndroid Build Coastguard Worker
193*48a54d36SAndroid Build Coastguard Worker hr = PrxDllRegisterServer();
194*48a54d36SAndroid Build Coastguard Worker
195*48a54d36SAndroid Build Coastguard Worker if (FAILED(hr))
196*48a54d36SAndroid Build Coastguard Worker
197*48a54d36SAndroid Build Coastguard Worker return hr;
198*48a54d36SAndroid Build Coastguard Worker
199*48a54d36SAndroid Build Coastguard Worker hr = PrxDllUnregisterServer();
200*48a54d36SAndroid Build Coastguard Worker
201*48a54d36SAndroid Build Coastguard Worker #endif
202*48a54d36SAndroid Build Coastguard Worker
203*48a54d36SAndroid Build Coastguard Worker return hr;
204*48a54d36SAndroid Build Coastguard Worker
205*48a54d36SAndroid Build Coastguard Worker }
206*48a54d36SAndroid Build Coastguard Worker
207*48a54d36SAndroid Build Coastguard Worker
208*48a54d36SAndroid Build Coastguard Worker
209