| /* |
| * Copyright 2008 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| // oophm.cpp : Implementation of DLL Exports. |
| |
| |
| #include "stdafx.h" |
| #include "resource.h" |
| #include "oophm_i.h" |
| #include "dllmain.h" |
| #include "dlldatax.h" |
| |
| // Used to determine whether the DLL can be unloaded by OLE |
| STDAPI DllCanUnloadNow(void) |
| { |
| #ifdef _MERGE_PROXYSTUB |
| HRESULT hr = PrxDllCanUnloadNow(); |
| if (hr != S_OK) |
| return hr; |
| #endif |
| return _AtlModule.DllCanUnloadNow(); |
| } |
| |
| |
| // Returns a class factory to create an object of the requested type |
| STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) |
| { |
| #ifdef _MERGE_PROXYSTUB |
| if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK) |
| return S_OK; |
| #endif |
| return _AtlModule.DllGetClassObject(rclsid, riid, ppv); |
| } |
| |
| |
| // DllRegisterServer - Adds entries to the system registry |
| STDAPI DllRegisterServer(void) |
| { |
| // registers object, typelib and all interfaces in typelib |
| HRESULT hr = _AtlModule.DllRegisterServer(); |
| #ifdef _MERGE_PROXYSTUB |
| if (FAILED(hr)) |
| return hr; |
| hr = PrxDllRegisterServer(); |
| #endif |
| return hr; |
| } |
| |
| |
| // DllUnregisterServer - Removes entries from the system registry |
| STDAPI DllUnregisterServer(void) |
| { |
| HRESULT hr = _AtlModule.DllUnregisterServer(); |
| #ifdef _MERGE_PROXYSTUB |
| if (FAILED(hr)) |
| return hr; |
| hr = PrxDllRegisterServer(); |
| if (FAILED(hr)) |
| return hr; |
| hr = PrxDllUnregisterServer(); |
| #endif |
| return hr; |
| } |
| |
| // DllInstall - Adds/Removes entries to the system registry per user |
| // per machine. |
| STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine) |
| { |
| HRESULT hr = E_FAIL; |
| #if 0 |
| // TODO(jat): consider adding this back |
| static const wchar_t szUserSwitch[] = _T("user"); |
| |
| if (pszCmdLine != NULL) |
| { |
| if (_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0) |
| { |
| AtlSetPerUserRegistration(true); |
| } |
| } |
| #endif |
| |
| if (bInstall) |
| { |
| hr = DllRegisterServer(); |
| if (FAILED(hr)) |
| { |
| DllUnregisterServer(); |
| } |
| } |
| else |
| { |
| hr = DllUnregisterServer(); |
| } |
| |
| return hr; |
| } |
| |
| |