-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathdllmain.cpp
More file actions
136 lines (123 loc) · 3.41 KB
/
dllmain.cpp
File metadata and controls
136 lines (123 loc) · 3.41 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "pch.h"
#include "Installer.h"
#include "SimpleFactory.h"
#include "ClassicEditWithNppExplorerCommandHandler.h"
#include "ModernEditWithNppExplorerCommandHandler.h"
#include "LoggingHelper.h"
using namespace NppShell::CommandHandlers;
using namespace NppShell::Factories;
using namespace NppShell::Helpers;
HMODULE g_module;
LoggingHelper g_loggingHelper;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_module = hModule;
try
{
NppShell::Installer::EnsureRegistrationOnCurrentUser();
}
catch (...)
{
// Never crash process attach due to optional registration checks.
g_loggingHelper.LogMessage(L"DllMain", L"Unknown exception during EnsureRegistrationOnCurrentUser.");
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
STDAPI DllRegisterServer()
{
try
{
return NppShell::Installer::Install();
}
catch (const winrt::hresult_error& ex)
{
g_loggingHelper.LogMessage(L"DllRegisterServer", L"WinRT exception: " + LoggingHelper::FormatHResult(ex.code()));
return ex.code();
}
catch (const exception& ex)
{
wstring whatMessage;
if (ex.what() != nullptr)
{
const string message(ex.what());
whatMessage.assign(message.begin(), message.end());
}
g_loggingHelper.LogMessage(L"DllRegisterServer", L"std::exception: " + whatMessage);
return E_FAIL;
}
catch (...)
{
g_loggingHelper.LogMessage(L"DllRegisterServer", L"Unknown exception.");
return E_FAIL;
}
}
STDAPI DllUnregisterServer()
{
try
{
return NppShell::Installer::Uninstall();
}
catch (const winrt::hresult_error& ex)
{
g_loggingHelper.LogMessage(L"DllUnregisterServer", L"WinRT exception: " + LoggingHelper::FormatHResult(ex.code()));
return ex.code();
}
catch (const exception& ex)
{
wstring whatMessage;
if (ex.what() != nullptr)
{
const string message(ex.what());
whatMessage.assign(message.begin(), message.end());
}
g_loggingHelper.LogMessage(L"DllUnregisterServer", L"std::exception: " + whatMessage);
return E_FAIL;
}
catch (...)
{
g_loggingHelper.LogMessage(L"DllUnregisterServer", L"Unknown exception.");
return E_FAIL;
}
}
__control_entrypoint(DllExport)
STDAPI DllCanUnloadNow(void)
{
if (winrt::get_module_lock())
{
return S_FALSE;
}
else
{
return S_OK;
}
}
_Use_decl_annotations_ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) try
{
*ppv = nullptr;
if (rclsid == __uuidof(ClassicEditWithNppExplorerCommandHandler))
{
return winrt::make<SimpleFactory<ClassicEditWithNppExplorerCommandHandler>>().as(riid, ppv);
}
else if (rclsid == __uuidof(ModernEditWithNppExplorerCommandHandler))
{
return winrt::make<SimpleFactory<ModernEditWithNppExplorerCommandHandler>>().as(riid, ppv);
}
else
{
return CLASS_E_CLASSNOTAVAILABLE;
}
}
catch (...)
{
return winrt::to_hresult();
}