質問編集履歴

2

誤字

2020/09/25 12:10

投稿

tmykbys
tmykbys

スコア14

test CHANGED
File without changes
test CHANGED
@@ -58,11 +58,11 @@
58
58
 
59
59
 
60
60
 
61
- #include <stdio.h>
61
+ \#include <stdio.h>
62
-
62
+
63
- #include <windows.h>
63
+ \#include <windows.h>
64
-
64
+
65
- #include <conio.h>
65
+ \#include <conio.h>
66
66
 
67
67
 
68
68
 

1

エラーメッセージ・コード・環境の追記

2020/09/25 12:10

投稿

tmykbys
tmykbys

スコア14

test CHANGED
File without changes
test CHANGED
@@ -21,3 +21,277 @@
21
21
 
22
22
 
23
23
  稚拙な説明で申し訳ございませんが、何卒よろしくお願いいたします。
24
+
25
+
26
+
27
+
28
+
29
+ ◆追記
30
+
31
+
32
+
33
+
34
+
35
+ 環境:Microsoft Visual Studio Community 2019 Version 16.7.2
36
+
37
+
38
+
39
+ エラーメッセージ:Bull様が提示してくださった通り、
40
+
41
+ Debug Assertion Failed!
42
+
43
+ Expression: (L"Buffer is too small" && 0)
44
+
45
+ と表示されます。
46
+
47
+
48
+
49
+ コード:dodox86様、Bull様のおっしゃる通り、
50
+
51
+ 上記のコードを編集し、現在は以下の通りです。
52
+
53
+ scanf,gets等はscanf_s等、対応するものに書き換えました。
54
+
55
+
56
+
57
+ /* filemapping01.c */
58
+
59
+
60
+
61
+ #include <stdio.h>
62
+
63
+ #include <windows.h>
64
+
65
+ #include <conio.h>
66
+
67
+
68
+
69
+ int FRead(LPSTR);
70
+
71
+ int FWrite(LPSTR);
72
+
73
+
74
+
75
+ HANDLE hFMWrite;
76
+
77
+
78
+
79
+
80
+
81
+ int main()
82
+
83
+ {
84
+
85
+
86
+
87
+ static LPSTR lpAddress1, lpAddress2;
88
+
89
+
90
+
91
+ int szNo=0;
92
+
93
+ BOOL bEnd = FALSE;
94
+
95
+
96
+
97
+ while (1) {
98
+
99
+ printf("***************\n");
100
+
101
+ printf("1. Writre\n");
102
+
103
+ printf("2. Read\n");
104
+
105
+ printf("0. End\n");
106
+
107
+ printf("***************\n");
108
+
109
+ printf("No. = ");
110
+
111
+ scanf_s("%d",&szNo);
112
+
113
+
114
+
115
+ switch (szNo) {
116
+
117
+ case 1:
118
+
119
+ FWrite(lpAddress1);
120
+
121
+ break;
122
+
123
+ case 2:
124
+
125
+ FRead(lpAddress2);
126
+
127
+ break;
128
+
129
+ case 0:
130
+
131
+ bEnd = TRUE;
132
+
133
+ break;
134
+
135
+ default:
136
+
137
+ printf("正しくない番号です\n\n");
138
+
139
+ break;
140
+
141
+ }
142
+
143
+ if (bEnd)
144
+
145
+ break;
146
+
147
+ }
148
+
149
+
150
+
151
+
152
+
153
+ if (hFMWrite) {
154
+
155
+ if (CloseHandle(hFMWrite) == 0)
156
+
157
+ printf("書き込みハンドルクローズ失敗\n");
158
+
159
+ else
160
+
161
+ printf("書き込みハンドルクローズ成功\n");
162
+
163
+ }
164
+
165
+
166
+
167
+ return 0;
168
+
169
+ }
170
+
171
+
172
+
173
+ int FWrite(LPSTR lpStr)
174
+
175
+ {
176
+
177
+ char szStr[1024];
178
+
179
+
180
+
181
+ if (!hFMWrite)
182
+
183
+ CloseHandle(hFMWrite);
184
+
185
+
186
+
187
+
188
+
189
+ hFMWrite = CreateFileMapping(
190
+
191
+ (HANDLE)-1,
192
+
193
+ NULL,
194
+
195
+ PAGE_READWRITE,
196
+
197
+ 0,
198
+
199
+ 1024,
200
+
201
+ "NEKODEMOWAKARU");
202
+
203
+ if (hFMWrite == NULL)
204
+
205
+ return -1;
206
+
207
+ if (GetLastError() == ERROR_ALREADY_EXISTS)
208
+
209
+ printf("すでにマッピングオブジェクトが存在しました\n");
210
+
211
+
212
+
213
+ lpStr = (LPSTR)MapViewOfFile(hFMWrite,
214
+
215
+ FILE_MAP_ALL_ACCESS, 0, 0, 0);
216
+
217
+ if (lpStr == NULL)
218
+
219
+ return -2;
220
+
221
+
222
+
223
+ printf("書き込み==");
224
+
225
+ scanf_s(szStr,1024);
226
+
227
+ strcpy_s(lpStr,1024, szStr);
228
+
229
+ strcat_s(lpStr,1024, "\n");
230
+
231
+
232
+
233
+ UnmapViewOfFile(lpStr);
234
+
235
+
236
+
237
+ printf("書き込みました\n");
238
+
239
+ return 0;
240
+
241
+ }
242
+
243
+
244
+
245
+ int FRead(LPSTR lpStr)
246
+
247
+ {
248
+
249
+ HANDLE hFM;
250
+
251
+
252
+
253
+ hFM = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "NEKODEMOWAKARU");
254
+
255
+
256
+
257
+ lpStr = (LPSTR)MapViewOfFile(hFM,
258
+
259
+ FILE_MAP_ALL_ACCESS, 0, 0, 0);
260
+
261
+
262
+
263
+ if (lpStr == NULL) {
264
+
265
+ printf("受信失敗\n");
266
+
267
+ CloseHandle(hFM);
268
+
269
+ return -1;
270
+
271
+ }
272
+
273
+ printf(lpStr);
274
+
275
+ if (UnmapViewOfFile(lpStr) == 0) {
276
+
277
+ printf("読み込み用アドレスアンマップ失敗\n");
278
+
279
+ }
280
+
281
+ else {
282
+
283
+ printf("読み込み用アドレスアンマップ成功\n");
284
+
285
+ lpStr = NULL;
286
+
287
+ }
288
+
289
+
290
+
291
+ CloseHandle(hFM);
292
+
293
+
294
+
295
+ return 0;
296
+
297
+ }