4 * Copyright 2005 Thomas Weidenmueller <w3seek@reactos.com>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "objsel_private.h"
24 #include "wine/debug.h"
26 WINE_DEFAULT_DEBUG_CHANNEL(objsel);
29 static HINSTANCE hInstance;
31 /***********************************************************************
34 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
38 case DLL_PROCESS_ATTACH:
40 DisableThreadLibraryCalls(hInstance);
47 /***********************************************************************
48 * DllGetClassObject (OBJSEL.@)
50 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
52 TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
56 if (IsEqualGUID(rclsid, &CLSID_DsObjectPicker))
57 return IClassFactory_QueryInterface((IClassFactory*)&OBJSEL_ClassFactory, iid, ppv);
59 FIXME("CLSID: %s, IID: %s\n", debugstr_guid(rclsid), debugstr_guid(iid));
60 return CLASS_E_CLASSNOTAVAILABLE;
64 /***********************************************************************
65 * DllCanUnloadNow (OBJSEL.@)
67 HRESULT WINAPI DllCanUnloadNow(void)
69 return dll_refs != 0 ? S_FALSE : S_OK;
73 /***********************************************************************
74 * DllRegisterServer (OBJSEL.@)
76 HRESULT WINAPI DllRegisterServer(void)
78 return __wine_register_resources( hInstance, NULL );
82 /***********************************************************************
83 * DllUnregisterServer (OBJSEL.@)
85 HRESULT WINAPI DllUnregisterServer(void)
87 return __wine_unregister_resources( hInstance, NULL );
91 /**********************************************************************
92 * OBJSEL_IDsObjectPicker_Destroy (also IUnknown)
94 static VOID OBJSEL_IDsObjectPicker_Destroy(IDsObjectPickerImpl *This)
96 HeapFree(GetProcessHeap(),
102 /**********************************************************************
103 * OBJSEL_IDsObjectPicker_AddRef (also IUnknown)
105 static ULONG WINAPI OBJSEL_IDsObjectPicker_AddRef(IDsObjectPicker * iface)
107 IDsObjectPickerImpl *This = (IDsObjectPickerImpl *)iface;
112 if (This == NULL) return E_POINTER;
114 ref = InterlockedIncrement(&This->ref);
118 InterlockedIncrement(&dll_refs);
125 /**********************************************************************
126 * OBJSEL_IDsObjectPicker_Release (also IUnknown)
128 static ULONG WINAPI OBJSEL_IDsObjectPicker_Release(IDsObjectPicker * iface)
130 IDsObjectPickerImpl *This = (IDsObjectPickerImpl *)iface;
135 if (This == NULL) return E_POINTER;
137 ref = InterlockedDecrement(&This->ref);
141 InterlockedDecrement(&dll_refs);
142 OBJSEL_IDsObjectPicker_Destroy(This);
149 /**********************************************************************
150 * OBJSEL_IDsObjectPicker_QueryInterface (also IUnknown)
152 static HRESULT WINAPI OBJSEL_IDsObjectPicker_QueryInterface(
153 IDsObjectPicker * iface,
157 TRACE("\n\tIID:\t%s\n",debugstr_guid(riid));
159 if (ppvObj == NULL) return E_POINTER;
161 if (IsEqualGUID(riid, &IID_IUnknown) ||
162 IsEqualGUID(riid, &IID_IDsObjectPicker))
165 OBJSEL_IDsObjectPicker_AddRef(iface);
169 FIXME("- no interface IID: %s\n", debugstr_guid(riid));
170 return E_NOINTERFACE;
174 /**********************************************************************
175 * OBJSEL_IDsObjectPicker_Initialize
177 static HRESULT WINAPI OBJSEL_IDsObjectPicker_Initialize(
178 IDsObjectPicker * iface,
179 PDSOP_INIT_INFO pInitInfo)
186 /**********************************************************************
187 * OBJSEL_IDsObjectPicker_InvokeDialog
189 static HRESULT WINAPI OBJSEL_IDsObjectPicker_InvokeDialog(
190 IDsObjectPicker * iface,
192 IDataObject** ppdoSelections)
199 /**********************************************************************
200 * IDsObjectPicker_Vtbl
202 static IDsObjectPickerVtbl IDsObjectPicker_Vtbl =
204 OBJSEL_IDsObjectPicker_QueryInterface,
205 OBJSEL_IDsObjectPicker_AddRef,
206 OBJSEL_IDsObjectPicker_Release,
207 OBJSEL_IDsObjectPicker_Initialize,
208 OBJSEL_IDsObjectPicker_InvokeDialog
212 /**********************************************************************
213 * OBJSEL_IDsObjectPicker_Create
215 HRESULT WINAPI OBJSEL_IDsObjectPicker_Create(LPVOID *ppvObj)
217 IDsObjectPickerImpl *Instance = HeapAlloc(GetProcessHeap(),
219 sizeof(IDsObjectPickerImpl));
220 if (Instance != NULL)
222 Instance->lpVtbl = &IDsObjectPicker_Vtbl;
223 OBJSEL_IDsObjectPicker_AddRef((IDsObjectPicker *)Instance);
229 return E_OUTOFMEMORY;