Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
WindowsLibrary.cpp
[詳解]
1// ----------------------------------------------------------------------------
6
7#include "pch.h"
8#include "WindowsLibrary.h"
9
10using namespace alt;
11
12#pragma comment (linker, "/section:SharedZone,rws")
13#pragma data_seg("SharedZone")
14// ----------------------------------------------------------------------------
15namespace SharedZone
16{
17 // この#pragma区間はDLLを共有するEXE間で同じデータを見ることになります。
18 ULONGLONG testCounter = 0;
19}
20// ----------------------------------------------------------------------------
21#pragma data_seg()
22
23BOOL DllMain (
24 HMODULE hModule, DWORD dwReasonForCall, LPVOID lpvReserved)
25{
26 TCHAR tszMessage[80] = { 0 };
27
28 switch (dwReasonForCall)
29 {
30 case DLL_PROCESS_ATTACH:
31 wsprintf (tszMessage, _T ("WindowsLibrary.dll DLL_PROCESS_ATTACH.\n"));
32 break;
33
34 case DLL_THREAD_ATTACH:
35 wsprintf (tszMessage, _T ("WindowsLibrary.dll DLL_THREAD_ATTACH.\n"));
36 break;
37
38 case DLL_THREAD_DETACH:
39 wsprintf (tszMessage, _T ("WindowsLibrary.dll DLL_THREAD_DETACH.\n"));
40 break;
41
42 case DLL_PROCESS_DETACH:
43 wsprintf (tszMessage, _T ("WindowsLibrary.dll DLL_PROCESS_DETACH.\n"));
44 break;
45 }
46 OutputDebugString (tszMessage); // このデバッグ方法があるという意味で残しておきます。
47
48 return TRUE;
49}
50
52{
53 _dwErrorNo = ::GetLastError ();
54}
55
57{
58 _hObject = INVALID_HANDLE_VALUE;
59}
60
62{
63 this->Close ();
64}
65
67{
68 return _hObject;
69}
70
72{
73 BOOL ret = TRUE;
74
75 if (_hObject != INVALID_HANDLE_VALUE)
76 {
77 ret = ::CloseHandle (_hObject);
78 _hObject = INVALID_HANDLE_VALUE;
79 }
80
81 return ret;
82}
83
84DWORD ReadWriteHandleLibrary::Read (LPVOID lpvBuffer, DWORD dwSize) const
85{
86 DWORD dwNumberOfBytesRead = 0;
87
88 BOOL ret = ::ReadFile (
90 lpvBuffer,
91 dwSize,
92 &dwNumberOfBytesRead,
93 NULL);
94 if (ret == FALSE)
95 {
96 dwNumberOfBytesRead = (DWORD)-1;
97 }
98
99 return dwNumberOfBytesRead;
100}
101
102DWORD ReadWriteHandleLibrary::Write (LPCVOID lpcvBuffer, DWORD dwSize) const
103{
104 DWORD dwNumberOfBytesWritten = 0;
105
106 BOOL ret = ::WriteFile (
107 _hObject,
108 lpcvBuffer,
109 dwSize,
110 &dwNumberOfBytesWritten,
111 NULL);
112 if (ret == FALSE)
113 {
114 dwNumberOfBytesWritten = (DWORD)-1;
115 }
116
117 return dwNumberOfBytesWritten;
118}
119
121{
122 return ::FlushFileBuffers (_hObject);
123}
124
125DWORD WaitableHandleLibrary::Wait (DWORD dwWaitTime) const
126{
127 return ::WaitForSingleObject (_hObject, dwWaitTime);
128}
BOOL DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpvReserved)
WindowsAPIを集約したプロジェクトファイル
プリコンパイル済みヘッダー ファイルです。
HANDLE _hObject
ハンドルを使用するWindowsAPIで保持するHANDLE値
HANDLE APIENTRY GetHandle() const
継承先はこの関数でハンドルを取得します。
APIENTRY ~HandleLibrary()
デストラクタ
APIENTRY HandleLibrary()
コンストラクタ
BOOL APIENTRY Close()
使用しなくなったハンドルはこれでクローズします。
BOOL APIENTRY Flush() const
まだデバイスに出力されていないデータを吐き出させます。
DWORD APIENTRY Read(LPVOID lpvBuffer, DWORD dwSize) const
HANDLEを使ってデータを読み込みます。
DWORD APIENTRY Write(LPCVOID lpcvBuffer, DWORD dwSize) const
HANDLEを使ってデータを書き込みます。
DWORD APIENTRY Wait(DWORD dwWaitTime=INFINITE) const
シグナル状態になるとブロックを解除します。
virtual VOID APIENTRY SetErrNo()
WINAPIエラーの情報を設定します。
ULONGLONG testCounter
Definition: DBLibrary.h:12