Yggdrasil Seeds : Software Works : DualMusik : DUMCMAIN.DLL
PV[987582]

DUMCMAIN.DLL


DUMC/DUMCWの本体で、メモリ上のDMSソースをコンパイルしてファイルに出力するものです。
他のアプリケーションからでも使えるように作ってありますが、ここでは Borland C + Windows API で使用することを想定しています。これ以外については面倒みきれないので、適当に解釈しといてください。

組み込み

DUMCMAIN.DLL を利用するソースファイルに DUMCMAIN.H をインクルードします。また、インポートライブラリを利用する場合は DUMCMAIN.LIB をリンクします。

使用手順

DUMCMAIN.DLL からインポートできる関数名は "dumc" "dc_version" のみです。インポートライブラリを利用する場合は、この関数を直接呼び出せます。
そうでない場合は、自前で関数のポインタを取得する必要があります。

HANDLE dllh; DCFUNC dumc; /*エラー処理は省略してるけど、本当は省略したらあかん*/ dllh=LoadLibrary("DUMCMAIN.DLL"); dumc=(DCFUNC)GetProcAddress(dllh,"dumc");
コンパイル中に原因の特定できるエラーが発生したときは、コールバック関数にメッセージが渡されます。
エラーメッセージが必要であれば、コールバック関数を用意してください。

DUMCALLTYPE void errorcallback(PDUMVOID msg,PDUMVOID cap) { /*msg: エラーメッセージ*/ /*cap: キャプション(dumcの引数srcに渡した文字列)*/ /*例: ダイアログを表示する*/ MessageBoxEx(NULL,msg,cap,MB_APPLMODAL|MB_ICONSTOP|MB_DEFBUTTON1| MB_SETFOREGROUND|MB_OK,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)); }

インポート関数


DUMU4B DUMEXPORTTYPE dc_version(void)
(V0.30以降)

返値
DUMCMAIN.DLLのヴァージョン情報を32bit値で返す。
これは8bitずつ4つのメンバで区切られ、上位から順にアンオフィシャル識別番号,メジャーヴァージョン,マイナーヴァージョン,リリースカウントとなっている。
なお、この関数はV0.30に追加したものであり、これより古いヴァージョンのDLLを対象に呼び出した場合はシステムエラーが出る。


int DUMEXPORTTYPE dumc(PDUMVOID buf,DUMU4B size,PDUMVOID src,PDUMVOID dest,DUMU4B flag,DCCBERR cberr,PDUMVOID usr)
int DUMEXPORTTYPE dumc(PDUMVOID buf,DUMU4B size,PDUMVOID src,PDUMVOID dest,DUMU4B flag,DCCBERR cberr)(V0.23 rel.1まで)

引数
bufDMSソースの先頭アドレス
sizeDMSソースのサイズ(byte)
srcソース名(文字列ポインタ)
エラーメッセージのキャプションとして使うだけなので、必ずしもファイル名である必要はない。
destDUM出力先のファイル名(文字列ポインタ)
flagスウィッチングフラグ(DUMCの/Fオプションで指定する値と同じ)
cberrエラー時に呼ばれるコールバック関数
usrユーザポインタ
コールバック関数が呼ばれるときに渡される任意の値
void DUMCALLTYPE (*DCCBERR)(PDUMVOID usr,PDUMVOID msg,PDUMVOID cap)
void DUMCALLTYPE (*DCCBERR)(PDUMVOID msg,PDUMVOID cap)(V0.23 rel.1まで)
usr: ユーザポインタ
msg: エラーメッセージ(文字列ポインタ)
cap: キャプション(文字列ポインタ)
usrエラーコールバックに渡されるユーザポインタ(任意値)

処理内容
buf,sizeで示されるDMSソースをコンパイルし、ファイルdestに書き出す。
原因の特定できるエラーが発生したときは、関数cberrが呼び出される。

返値
0正常に処理完了
-1コールバック呼び出し対象のエラー(dumcとほぼ同じ, Illegal option と System critical のみ対象外)が発生。
cberrがNULLでも、呼び出し対象のエラーであれば -1 が返る。
otherコールバック呼び出し対象ではないエラーが発生。


[表紙]