@@ -167,7 +167,7 @@ HRESULT ReadAllIdleInstalls(std::vector<IdleData> &idles, HKEY hive, LPCWSTR roo
167167}
168168
169169class DECLSPEC_UUID (CLSID_LAUNCH_COMMAND) LaunchCommand
170- : public RuntimeClass<RuntimeClassFlags<ClassicCom>, IExplorerCommand>
170+ : public RuntimeClass<RuntimeClassFlags<ClassicCom>, IExplorerCommand, IObjectWithSite >
171171{
172172 std::wstring title;
173173 std::wstring exe;
@@ -269,6 +269,26 @@ class DECLSPEC_UUID(CLSID_LAUNCH_COMMAND) LaunchCommand
269269 *ppEnum = NULL ;
270270 return E_NOTIMPL;
271271 }
272+
273+ // IObjectWithSite
274+ private:
275+ ComPtr<IUnknown> _site;
276+
277+ public:
278+ IFACEMETHODIMP GetSite (REFIID riid, void **ppvSite)
279+ {
280+ if (_site) {
281+ return _site->QueryInterface (riid, ppvSite);
282+ }
283+ *ppvSite = NULL ;
284+ return E_FAIL;
285+ }
286+
287+ IFACEMETHODIMP SetSite (IUnknown *pSite)
288+ {
289+ _site = pSite;
290+ return S_OK;
291+ }
272292};
273293
274294
@@ -321,7 +341,6 @@ class DECLSPEC_UUID(CLSID_IDLE_COMMAND) IdleCommand
321341 std::vector<IdleData> idles;
322342 std::wstring iconPath;
323343 std::wstring title;
324- ComPtr<IUnknown> _site;
325344public:
326345 IdleCommand () : title (L" Edit in &IDLE" )
327346 {
@@ -434,6 +453,11 @@ class DECLSPEC_UUID(CLSID_IDLE_COMMAND) IdleCommand
434453 return S_OK;
435454 }
436455
456+ // IObjectWithSite
457+ private:
458+ ComPtr<IUnknown> _site;
459+
460+ public:
437461 IFACEMETHODIMP GetSite (REFIID riid, void **ppvSite)
438462 {
439463 if (_site) {
@@ -469,9 +493,6 @@ IExplorerCommand *MakeIdleCommand(HKEY hive, LPCWSTR root)
469493
470494#elif defined(_WINDLL)
471495
472- #pragma comment(linker, "/export:DllGetClassObject")
473- #pragma comment(linker, "/export:DllCanUnloadNow")
474-
475496STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, _COM_Outptr_ void ** ppv)
476497{
477498 return Module<InProc>::GetModule ().GetClassObject (rclsid, riid, ppv);
0 commit comments