dSakura.dll について


目次



概要

サクラの心臓部分です。これを利用すれば自作のプログラムで、簡単にMIDIファイルを生成することができます。


どこにあるの?

dSakura.dllは、サクラをインストールしたフォルダに入っています。(Windowsデフォルトでは、DLLは隠しファイルになっていますので、見えなくなっているかもしれませんが。)


連絡先:

https://sakuramml.com/
クジラ飛行机


作成環境:

Borland C++Builder 4


動作テスト済み環境:

Microsoft Visual Basic 5 と 6
Borland C++Builder 4
Borland Delphi 4


著作権&配布制限

dSakura.dllの著作権は、クジラ飛行机にあります。dSakura.dllの使用、配布は自由です。その際は、一言声をかけていただけると嬉しいです。特に、自作アプリから使用し、公開する場合には、ぜひ一報お願いします。私のホームページで、宣伝しますので!!



説明


DLLの関数

BOOL MMLtoMIDI(char *MMLText, char *FileName, char *ErrMsg);

MMLText     : MMLかストトンを入れて下さい。MMLの文法は、別途ヘルプファイルをご覧ください。
FileName    : 完成したMIDIファイルを保存する名前を入れて下さい。
ErrMsg      : 最大256文字の固定長文字列に、エラーメッセージを返します。
       SetErrMsgLenにて、エラー文字列長が変えられます。
void GetVerInfo(char *s);
s           : 領域を確保した文字列を指定すると、詳細バージョン情報文字列を返す
void SetErrMsgLen(int mLen);
mLen            : エラーメッセージのバッファ長を設定。

注意

サクラは、コンパイル前に、定義ファイルstdmsg.hを読み込む事になっていますので、dSakura.dllを置くディレクトリか、そのディレクトリの中に、必ず、stdmsg.hを置いてください。



使用方法

以下、各開発環境で、実際に使う例をのせておきました。静的にリンクする方法です。


Visual Basic から使う

サンプルコードの提供は、北神陽太さん<mailto:y-kitagami@nifty.ne.jp>です。
dSakuraを使いたいモジュールの先頭で、以下のように宣言します。

'for dSakura
Private Declare Function MMLtoMIDI Lib "dSakura.dll" (ByVal Value As String, ByVal FName As String, ByVal ErrMsg As String) As Boolean

以下使用例です。
        
Private Function Compile() As Boolean
    Dim MMLstr As String       'コンパイルするMMLテキスト
    Dim kekka As Boolean       'コンパイル結果(Falseでエラー)
    Dim ErrMsg As String * 512 'エラーメッセージ固定長文字列
    Dim FName As String        '作業用midファイル名
On Error GoTo ERRSUB

ChDir App.Path 'DLLを実行アプリと同じディレクトリに置いてある場合
'ここではSakuraのリッチテキスト部分がアクティブか確認し、
'リッチテキストのMMLを定義しています。
'自作プログラムでは使用しているコントロールに変更するか、
'直接MMLテキストを定義してください。
If ActiveForm Is Nothing Then Exit Function
MMLstr = ActiveForm.rtfText.Text

'書き出すmidファイル名。
'ここでは、プログラムと同じパスに"Temp.mid"を作成します。
FName = App.Path & "\Temp.mid"

'コンパイルします。
kekka = MMLtoMIDI(MMLstr, FName, ErrMsg)

'コンパイル結果がエラーならメッセージを表示します。
If kekka = False Then
        ErrMsg = Left(ErrMsg, InStr(ErrMsg, vbNullChar) - 1) 'Null文字除去
        MsgBox"コンパイルに失敗しました。" & vbCr & _
                "dSakura.DLLからのメッセージ:" & vbCr & _
                ErrMsg, vbExclamation, "dSakura.DLL MMLエラー"
End If

'コンパイル結果は、エラーのときFalseを返します。
'結果により処理を分岐させる場合、If Compile <> False Then で
'分岐させてください(VBではTrueの値が違うため注意)
Compile = kekka

Exit Function

'エラー処理
ERRSUB:

If Err = 48 Then
  MsgBox "dSakura.DLLがありません。"  , vbCritical, "確認"
  Resume Next
End If

End Function



Delphi から使う

interface部で、以下のように宣言します。

function MMLtoMIDI(mml:PChar; fname:PChar; err:PChar):BOOL; stdcall external 'dSakura.dll';

実際の使用例です。

Button1を押したとき、RichEdit1にあるテキストをコンパイルします。演奏用にTMediaPlayerも貼り付けておいてください。

procedure TForm1.Button1Click(Sender: TObject);
var
    txt,fname,d:String;
    c:Array [0..256] of Char;
    f:Boolean;
begin
    RichEdit1.PlainText := True;
    txt:=RichEdit1.Text ;
    fname:='test.mid';
    f:=MMLtoMIDI(PChar(txt),PChar(fname),@c);

    if not f then
    begin
        ShowMessage('コンパイル失敗');
        SetLength(d,300);
        StrLCopy(PChar(d),@c,512);
        ShowMessage(d+':');
    end else begin
        MediaPlayer1.FileName := 'test.mid';
        MediaPlayer1.Open ;
        MediaPlayer1.Play ;
    end;
end;



C++Builder から使う

宣言

extern "C" __declspec(dllimport) BOOL __stdcall MMLtoMIDI(char *text, char *fname, char *errmsg);

使用例

BOOL compile(){
       char t[BUFSIZ] = "cdefgfedcdefgfedc\n";
        char err1[256];
        return MMLtoMIDI(t,"test.mid",err1);
}
静的に使う場合、あらかじめ、implibツールで、.libファイルを作成して、メイクファイルにlibファイルを追加してください。

戻る