質問編集履歴

1

提示コードと文章を編集

2020/08/27 06:21

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- FormatMessage();関数の引数をどうしたらいいのかわからない。
1
+ FormatMessage();関数の引数をどうしたらいいのかわからない。例外がスローされる原因とは。
test CHANGED
@@ -1,14 +1,32 @@
1
- //////////コメント内部のコードですがFormatMessage();の関数の引数にどう値を設定したらいいかわかりません。どうすればいいいのでしょうか?GetLastError();関数で帰ってきたデータを使ってエラー文章を日本語で表示されるものだと思うのですが.....
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
- 公式リファレンス:c https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-formatmessage
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 = ERROR_INSUFFICIENT_BUFFER;
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
- if(e == ERROR_INSUFFICIENT_BUFFER)
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
- LPTSTR lpBuffer,
183
+ --_buffer;
118
-
119
-
120
-
121
- DWORD nSize,
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
- printf("size: %d\n\n",strlen(buffer));//66文字
207
+ size_t size = sizeof(buffer) + sizeof(de);
154
-
155
-
156
-
157
-
158
-
208
+
159
- //文字列検索して.exeの位置を返す。
209
+ //strcat_s(_buffer,size,de);
160
-
210
+
211
+
212
+
213
+
214
+
161
- printf("文字列検索して.exeの位置返す。\n");
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