//////////コメント内部のコードですがFormatMessage();の関数の引数の最後の値をどうすればいいいのでしょうか?
一応実装してみましたがなぜか例外がスローされてしまいます。原因がわからず困っているのですがどうすればいいのでしょうか?
公式リファレンスのサンプルコードを見ながら実装しましたがうまくいきません。
質問2、提示コードに警告という行がありますがキャストのコードで[
警告 C6276 意味が異なる文字列型の間でのキャストです: char * から wchar_t * です。無効な文字列を使用すると、未定義の動作を発生させる原因となる可能性があります 。]
環境 Visual studio 2019
公式リファレンス: https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-formatmessage
#include "stdio.h" #include <iostream> #include <string> #include <Windows.h> void print_pos(char* buf,int pos); void print_pos(char* buf,int pos) { printf("表示: "); for(int i = 0;i <= (pos); i++) { printf("%c",buf[i]); } printf("\n\n\n\n"); } int main() { char buffer[100000]; char* str = nullptr; //const char* wc = "C:\Users\yw325\Desktop\Project1_\x64\Release\test.txt"; const char tt[100] = "test.txt"; const char *de = "\Project_listup.exe"; int tt_s = strlen(tt); int de_s = strlen(de);//.exeファイルの長さ //int bu_s = sizeof(buffer); //printf("size: %d\n",de_s); //今居るディレクトリをパスを取得 printf("今居るディレクトリをパスを取得。\n"); //DWORD e = GetModuleFileNameA(NULL, buffer ,(DWORD)buffer); /// /////////////////////////////////////////////////////////////// DWORD errorLast = GetLastError(); const DWORD size = 200; WCHAR buff[size]; LPWSTR message = (LPWSTR)"ああああ";//警告 va_list *args = nullptr; printf("ああああ\n"); DWORD b = FormatMessageA(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, (LPCVOID)errorLast,0,0,(LPTSTR)buff,size,args);// //////////////////////////////////////////////////////////// //printf("\nError: %s\n"); }else{ printf("正常です。"); } printf("size: %d\n\n",strlen(buffer));//66文字 //文字列検索して.exeの位置を返す。 printf("文字列検索して.exeの位置を返す。\n"); int s = strlen(buffer); char* _buffer = strstr(buffer,de);//_bufferに.exeの位置を示している int now = s - de_s;//.exeまでの文字数 printf("%s\n",_buffer); printf("パスの全体 - .exeの位置 size: %d\n",now); int i = 0; for(int i = now; i > 0; i--) { --_buffer; } print_pos(_buffer,47); while(_buffer[i] == '\0') { ++_buffer; i++; } print_pos(_buffer,66); size_t size = sizeof(buffer) + sizeof(de); //strcat_s(_buffer,size,de); printf("ファイル名を追加\n\n\n\n\n\n"); printf("%s\n",_buffer); if(buffer == nullptr){ printf("nullptr"); } // printf("%s\n",buffer); int _c_ = getchar(); return 0; }
質問文中に挙げた公式リファレンスの説明中に、使用例、サンプルコードが載っていますが、何が分からないのでしょうか。
失礼しました。最後までリファレンスを見ていませんでした、すいませんでした。
質問ですがGetModuleFileNameA();が返すエラーコードはhttps://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulefilenameaにもある通りERROR_INSUFFICIENT_BUFFERでよろしいのでしょうか?下の行にもにたような#defineと思われるコードが多いので気になりました。
回答2件
あなたの回答
tips
プレビュー