メッセージファイル DLL を作成する

イベントログの書き込みなどで利用する「メッセージファイル DLL」を作成する手順を紹介します。

事前準備

Visual Studio をインストールします。Visual Studio 2017のインストール手順はこちらの記事を参照して下さい。

メッセージテキストファイルの作成

DLL作成の元となる "Message Text File" を作成します。ファイルの書式についてはこちらを参照してください。
下記のファイルを作成します。ファイルのエンコーディングはShift-JISで保存します。また、最後の行に空行を1行入れることに注意してください。
LogMessage.mc
;// ***** LogMessagese.mc *****
;// This is the header section.

MessageIdTypedef=DWORD

SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)

FacilityNames=(System=0x0:FACILITY_SYSTEM
Runtime=0x2:FACILITY_RUNTIME
Stubs=0x3:FACILITY_STUBS
Io=0x4:FACILITY_IO_ERROR_CODE
)

LanguageNames=(English=0x409:MSG00409)
LanguageNames=(Japanese=0x411:MSG00411)

;// The following are message definitions.
MessageId=0x1001
Severity=Error
Facility=Runtime
SymbolicName=MSG_BAD_COMMAND
Language=English
You have chosen an incorrect command.
.

Language=Japanese
正しくないコマンドです。
.

MessageId=0x1002
Severity=Warning
Facility=Io
SymbolicName=MSG_BAD_PARM1
Language=English
Cannot reconnect to the server.
.

Language=Japanese
再接続できませんでした。
.

MessageId=0x1003
Severity=Success
Facility=System
SymbolicName=MSG_STRIKE_ANY_KEY
Language=English
Press any key to continue . . . %0
.

Language=Japanese
続けるには、何かキーを押してください . . . %0
.

MessageId=0x1004
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2 which is in error.
.

Language=Japanese
ファイル %1 には エラー %2 が含まれています。
.

MessageId=0x1005
Severity=Informational
Facility=System
SymbolicName=MSG_RETRY
Language=English
There have been %1!d! attempts with %2!d!%% success%! Disconnect from the server and try again later.
.

Language=Japanese
%1!d! 回の試行で %2!d!%% しか成功しませんでした%! サーバーとの接続を切断し、後で再試行してください。
.

Message Compiler による mcファイルのコンパイル

mc.exe を利用して作成したmcファイルをコンパイルします。
スタートメニューのVisual Studio のプログラムグループの"Native Tools コマンドプロンプト"のショートカットをクリックします。


下図のコマンドプロンプトが表示されます。


下記のコマンドを実行します。
mc (mcファイル)
今回の例では下記のコマンドとなります。
mc LogMessages.mc



エラーが表示されずコマンド入力待ちになれば成功です。


コンパイルに成功すると、mcファイル名と同名のヘッダファイル(*.h)、リソースファイル(*.rc)、バイナリファイル(*.bin)、今回の例では、"LogMessages.h", "LogMessages.rc", "MSG00409.bin", "MSG00411.bin" の4つのファイルが作成されます。


Resource Compiler による rcファイルのコンパイル

rc.exe を利用して、生成された*.rc ファイルをコンパイルして、リソースファイルを作成します。

下記のコマンドを実行します。
rc (rcファイル)
今回の例では下記のコマンドとなります。
rc LogMessages.rc


エラーメッセージが表示されず、コマンド入力待ちになれば成功です。


コンパイルができると、*.res ファイルが作成されます。

リンカによるDLLファイルの作成

link.exe を利用してDLLファイルを作成します。

下記のコマンドを実行します。
link /NOENTRY /MACHINE:X86 /DLL (resファイル)
今回の例では下記のコマンドとなります。
link /NOENTRY /MACHINE:X86 /DLL LogMessages.res


エラーメッセージが表示されず、コマンド入力待ちになれば成功です。


リンクが成功するとDLLファイルが作成されます。


メッセージファイル DLLが作成できました。

補足
作成したメッセージDLLを利用してイベントログに書き込むプログラムの実装はこちらの記事を参照して下さい。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2020-02-01
作成日: 2018-08-29
iPentec all rights reserverd.