3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: DeskLink implementation
5 * COPYRIGHT: Copyright 2019 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
10 WINE_DEFAULT_DEBUG_CHANNEL(sendmail
);
12 BEGIN_OBJECT_MAP(ObjectMap
)
13 OBJECT_ENTRY(CLSID_DeskLinkDropHandler
, CDeskLinkDropHandler
)
17 LONG g_ModuleRefCnt
= 0;
19 STDAPI
DllCanUnloadNow(void)
23 return gModule
.DllCanUnloadNow();
26 STDAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
28 TRACE("CLSID:%s,IID:%s\n", wine_dbgstr_guid(&rclsid
), wine_dbgstr_guid(&riid
));
30 HRESULT hr
= gModule
.DllGetClassObject(rclsid
, riid
, ppv
);
32 TRACE("-- pointer to class factory: %p\n", *ppv
);
37 STDAPI
DllRegisterServer(void)
39 HRESULT hr
= gModule
.DllRegisterServer(FALSE
);
40 if (FAILED_UNEXPECTEDLY(hr
))
46 STDAPI
DllUnregisterServer(void)
48 HRESULT hr
= gModule
.DllUnregisterServer(FALSE
);
49 if (FAILED_UNEXPECTEDLY(hr
))
58 LPCWSTR pszTargetPath OPTIONAL
,
59 LPCITEMIDLIST pidlTarget OPTIONAL
,
60 LPCWSTR pszArg OPTIONAL
,
61 LPCWSTR pszDir OPTIONAL
,
62 LPCWSTR pszIconPath OPTIONAL
,
64 LPCWSTR pszComment OPTIONAL
)
66 CComPtr
<IShellLinkW
> psl
;
67 HRESULT hr
= CoCreateInstance(CLSID_ShellLink
, NULL
,
69 IID_PPV_ARG(IShellLinkW
, &psl
));
70 if (FAILED_UNEXPECTEDLY(hr
))
75 hr
= psl
->SetPath(pszTargetPath
);
76 if (FAILED_UNEXPECTEDLY(hr
))
81 hr
= psl
->SetIDList(pidlTarget
);
82 if (FAILED_UNEXPECTEDLY(hr
))
87 ERR("invalid argument\n");
92 hr
= psl
->SetArguments(pszArg
);
95 hr
= psl
->SetWorkingDirectory(pszDir
);
98 hr
= psl
->SetIconLocation(pszIconPath
, iIconNr
);
101 hr
= psl
->SetDescription(pszComment
);
103 CComPtr
<IPersistFile
> ppf
;
104 hr
= psl
->QueryInterface(IID_PPV_ARG(IPersistFile
, &ppf
));
105 if (FAILED_UNEXPECTEDLY(hr
))
108 hr
= ppf
->Save(pszLinkPath
, TRUE
);
109 if (FAILED_UNEXPECTEDLY(hr
))
115 STDAPI_(BOOL
) DllMain(HINSTANCE hInstance
, DWORD dwReason
, LPVOID fImpLoad
)
117 TRACE("%p 0x%x %p\n", hInstance
, dwReason
, fImpLoad
);
118 if (dwReason
== DLL_PROCESS_ATTACH
)
120 gModule
.Init(ObjectMap
, hInstance
, NULL
);
121 DisableThreadLibraryCalls(hInstance
);
123 else if (dwReason
== DLL_PROCESS_DETACH
)