none
MESSAGETABLE リソースについて RRS feed

  • 質問

  • C言語でのMESSAGETABLEの定義の方法を教えてください

    リソースファイルではSTRINGTABLEしか定義できません。


    ちなみにコマンドプロンプトの言語ファイル(ja-jp)をのぞいてみると、MESSAGETABLEでした。どうすればいいのでしょうか。

    2021年1月4日 9:12

すべての返信

  • Visual Studio(少なくとも私の手元の Visual Studio 2019)では画面上で MESSAGETABLE の定義を直接入力して作成する方法は無いようです。下記のサイトで MESSAGETABLE のリソース作成方法がまとめられていました。ご参考になりますでしょうか?

    イベントログで使うメッセージファイル DLLを作成する

    流れとしては、以下になるようです。

    1.MESSAGETABLE の元となるファイル(*.mc)をテキストエディタで作成する
      (フォーマット参考URL:Message Text Files (Windows) | Microsoft Docs
    2.Visual Studio に含まれている mc.exe を使って作成した *.mc ファイルをコンパイル
    3.リソースファイル(*.rc、*.bin等)が生成されるので、該当のプロジェクトに組込む
    2021年1月4日 13:30
  • やはりIDEで編集及びリンクはできないのですか。

    一応自らも調べてみたのですが、mc.exeでコンパイルする方法しかないようですね。

    このリンクに書かれていることをやってみたところbinファイルやrcファイルなどが自動生成されました!

    ご回答ありがとうございます!

    申し訳ないのですが、このファイルを使うにはFormatMessage APIを使うそうですが、今までシステムが用意してくれているmessagetableしか利用していませんでしたが、自前のmessagetableを扱うにはどのようなフラグ属性を指定したり、ファイルを指定したりすればよいでしょうか。StringTableはloadstingとgetmodulehandleで簡単だったのですが、、、formatmessageは難しくかいてあります...。こちらも教えていただけると嬉しいです。

    2021年1月5日 7:15
  • t31068068さん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    この記事(英語となりますが)に記載されている手順に従って、試してみてください。
    1、まずはMessage Text Filesでメッセージを定義します。これがSample Message Text File(英語)です。
    2、mc.exeで.mcファイルをコンパイルし、.bin、.rcと.hファイルを生成します。
    3、#includeで.hファイルをインクルードし、.rcファイルを参照に追加します。
    4、MESSAGETABLEリソースを定義します: "nameID MESSAGETABLEfilename"。
    5、FormatMessageを呼び出します。
    void OutputMessage(int n, ...)
    
    {
    
        LPTSTR lpBuffer = NULL;
    
        va_list vl;
    
        va_start(vl, n);
    
        DWORD ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE, NULL, MSG_CMD_DELETE, 0x409, (LPTSTR)&lpBuffer, 0, &vl);
    
        OutputDebugString(lpBuffer);
    
        LocalFree(lpBuffer);
    
        va_end(vl);
    
    }
    
     
    
        ...
    
    OutputMessage(2,L"1",L"2");
    
     

    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年1月11日 5:59
    モデレータ