| /* -*- Mode: C; tab-width: 4 -*- |
| * |
| * Copyright (c) 2009 Apple Computer, Inc. All rights reserved. |
| * |
| * 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. |
| |
| Change History (most recent first): |
| |
| $Log: DLLX.cpp,v $ |
| Revision 1.1 2009/05/26 04:43:54 herscher |
| <rdar://problem/3948252> COM component that can be used with any .NET language and VB. |
|
|
|
|
| */
|
|
|
|
|
| #include "stdafx.h"
|
| #include "resource.h"
|
| #include "DLLX.h"
|
| #include "dlldatax.h"
|
| #include <DebugServices.h>
|
|
|
|
|
| class CDLLComponentModule : public CAtlDllModuleT< CDLLComponentModule >
|
| {
|
| public :
|
| DECLARE_LIBID(LIBID_Bonjour)
|
| DECLARE_REGISTRY_APPID_RESOURCEID(IDR_DLLX, "{56608F9C-223B-4CB6-813D-85EDCCADFB4B}")
|
| };
|
|
|
| CDLLComponentModule _AtlModule;
|
|
|
|
|
| #ifdef _MANAGED
|
| #pragma managed(push, off)
|
| #endif
|
|
|
| // DLL Entry Point
|
| extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
|
| {
|
| debug_initialize( kDebugOutputTypeWindowsDebugger ); |
| debug_set_property( kDebugPropertyTagPrintLevel, kDebugLevelVerbose );
|
|
|
| #ifdef _MERGE_PROXYSTUB
|
| if (!PrxDllMain(hInstance, dwReason, lpReserved))
|
| return FALSE;
|
| #endif
|
| hInstance;
|
| return _AtlModule.DllMain(dwReason, lpReserved);
|
| }
|
|
|
| #ifdef _MANAGED
|
| #pragma managed(pop)
|
| #endif
|
|
|
|
|
|
|
|
|
| // 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;
|
| }
|
|
|