質問編集履歴
1
提示コードと文章を編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
FormatMessage();関数の引数をどうしたらいいのかわからない。
|
1
|
+
FormatMessage();関数の引数をどうしたらいいのかわからない。例外がスローされる原因とは。
|
test
CHANGED
@@ -1,14 +1,32 @@
|
|
1
|
-
//////////コメント内部のコードですがFormatMessage();の関数の引数
|
1
|
+
//////////コメント内部のコードですがFormatMessage();の関数の引数の最後の値をどうすればいいいのでしょうか?
|
2
|
+
|
2
|
-
|
3
|
+
一応実装してみましたがなぜか例外がスローされてしまいます。原因がわからず困っているのですがどうすればいいのでしょうか?
|
4
|
+
|
3
|
-
|
5
|
+
公式リファレンスのサンプルコードを見ながら実装しましたがうまくいきません。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
4
|
-
|
11
|
+
質問2、提示コードに警告という行がありますがキャストのコードで[
|
12
|
+
|
5
|
-
|
13
|
+
警告 C6276 意味が異なる文字列型の間でのキャストです: char * から wchar_t * です。無効な文字列を使用すると、未定義の動作を発生させる原因となる可能性があります 。]
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
6
|
-
|
21
|
+
環境 Visual studio 2019
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
11
|
-
公式リファレンス:
|
29
|
+
公式リファレンス: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-formatmessage
|
12
30
|
|
13
31
|
|
14
32
|
|
@@ -96,124 +114,108 @@
|
|
96
114
|
|
97
115
|
/// ///////////////////////////////////////////////////////////////
|
98
116
|
|
99
|
-
DWORD e = E
|
117
|
+
DWORD errorLast = GetLastError();
|
118
|
+
|
100
|
-
|
119
|
+
const DWORD size = 200;
|
120
|
+
|
121
|
+
WCHAR buff[size];
|
122
|
+
|
123
|
+
LPWSTR message = (LPWSTR)"ああああ";//警告
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
va_list *args = nullptr;
|
128
|
+
|
129
|
+
printf("ああああ\n");
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
DWORD b = FormatMessageA(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY,
|
134
|
+
|
135
|
+
(LPCVOID)errorLast,0,0,(LPTSTR)buff,size,args);//
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
////////////////////////////////////////////////////////////
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
//printf("\nError: %s\n");
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
}else{
|
148
|
+
|
149
|
+
printf("正常です。");
|
150
|
+
|
151
|
+
}
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
printf("size: %d\n\n",strlen(buffer));//66文字
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
//文字列検索して.exeの位置を返す。
|
162
|
+
|
163
|
+
printf("文字列検索して.exeの位置を返す。\n");
|
164
|
+
|
165
|
+
int s = strlen(buffer);
|
166
|
+
|
167
|
+
char* _buffer = strstr(buffer,de);//_bufferに.exeの位置を示している
|
168
|
+
|
101
|
-
i
|
169
|
+
int now = s - de_s;//.exeまでの文字数
|
170
|
+
|
171
|
+
printf("%s\n",_buffer);
|
172
|
+
|
173
|
+
printf("パスの全体 - .exeの位置 size: %d\n",now);
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
int i = 0;
|
178
|
+
|
179
|
+
for(int i = now; i > 0; i--)
|
102
180
|
|
103
181
|
{
|
104
182
|
|
105
|
-
/*
|
106
|
-
|
107
|
-
DWORD FormatMessage(
|
108
|
-
|
109
|
-
DWORD dwFlags,
|
110
|
-
|
111
|
-
LPCVOID lpSource,
|
112
|
-
|
113
|
-
DWORD dwMessageId,
|
114
|
-
|
115
|
-
DWORD dwLanguageId,
|
116
|
-
|
117
|
-
|
183
|
+
--_buffer;
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
184
|
+
|
122
|
-
|
123
|
-
va_list *Arguments
|
124
|
-
|
125
|
-
);
|
126
|
-
|
127
|
-
*/
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
DWORD ee = GetLastError();
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
FormatMessage();//
|
136
|
-
|
137
|
-
////////////////////////////////////////////////////////////
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
printf("\nError: %s\n");
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
}else{
|
146
|
-
|
147
|
-
printf("正常です。");
|
148
|
-
|
149
|
-
}
|
185
|
+
}
|
186
|
+
|
187
|
+
|
188
|
+
|
150
|
-
|
189
|
+
print_pos(_buffer,47);
|
190
|
+
|
151
|
-
|
191
|
+
while(_buffer[i] == '\0')
|
192
|
+
|
152
|
-
|
193
|
+
{
|
194
|
+
|
195
|
+
++_buffer;
|
196
|
+
|
197
|
+
i++;
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
}
|
202
|
+
|
203
|
+
print_pos(_buffer,66);
|
204
|
+
|
205
|
+
|
206
|
+
|
153
|
-
|
207
|
+
size_t size = sizeof(buffer) + sizeof(de);
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
208
|
+
|
159
|
-
//
|
209
|
+
//strcat_s(_buffer,size,de);
|
160
|
-
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
|
161
|
-
printf("
|
215
|
+
printf("ファイル名を追加\n\n\n\n\n\n");
|
162
|
-
|
163
|
-
int s = strlen(buffer);
|
164
|
-
|
165
|
-
char* _buffer = strstr(buffer,de);//_bufferに.exeの位置を示している
|
166
|
-
|
167
|
-
int now = s - de_s;//.exeまでの文字数
|
168
216
|
|
169
217
|
printf("%s\n",_buffer);
|
170
218
|
|
171
|
-
printf("パスの全体 - .exeの位置 size: %d\n",now);
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
int i = 0;
|
176
|
-
|
177
|
-
for(int i = now; i > 0; i--)
|
178
|
-
|
179
|
-
{
|
180
|
-
|
181
|
-
--_buffer;
|
182
|
-
|
183
|
-
}
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
print_pos(_buffer,47);
|
188
|
-
|
189
|
-
while(_buffer[i] == '\0')
|
190
|
-
|
191
|
-
{
|
192
|
-
|
193
|
-
++_buffer;
|
194
|
-
|
195
|
-
i++;
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
}
|
200
|
-
|
201
|
-
print_pos(_buffer,66);
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
size_t size = sizeof(buffer) + sizeof(de);
|
206
|
-
|
207
|
-
//strcat_s(_buffer,size,de);
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
printf("ファイル名を追加\n\n\n\n\n\n");
|
214
|
-
|
215
|
-
printf("%s\n",_buffer);
|
216
|
-
|
217
219
|
|
218
220
|
|
219
221
|
|