1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
#include "../libfilezilla/glue/dll.hpp"
#include <objbase.h>
namespace fz {
namespace {
extern "C" {
typedef HRESULT (STDAPICALLTYPE *coinitex_t)(LPVOID, DWORD);
typedef HRESULT (STDAPICALLTYPE *couninit_t)();
}
}
dll::dll(dll && d)
{
h_ = d.h_;
d.h_ = nullptr;
}
dll& dll::operator=(dll && d)
{
if (&d != this) {
if (h_) {
FreeLibrary(h_);
}
h_ = d.h_;
d.h_ = nullptr;
}
return *this;
}
shdlls::shdlls()
: shell32_(L"shell32.dll", LOAD_LIBRARY_SEARCH_SYSTEM32)
, ole32_(L"ole32.dll", LOAD_LIBRARY_SEARCH_SYSTEM32)
{
auto const coinitex = reinterpret_cast<coinitex_t>(ole32_["CoInitializeEx"]);
if (coinitex) {
coinitex(NULL, COINIT_MULTITHREADED);
}
}
shdlls::~shdlls()
{
auto const couninit = reinterpret_cast<couninit_t>(ole32_["CoUninitialize"]);
if (couninit) {
couninit();
}
}
shdlls& shdlls::get()
{
static shdlls d;
return d;
}
}
|