https://sakuramml.com/
クジラ飛行机
Borland C++Builder 4
Microsoft Visual Basic 5 と 6
Borland C++Builder 4
Borland Delphi 4
dSakura.dllの著作権は、クジラ飛行机にあります。dSakura.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 :
エラーメッセージのバッファ長を設定。
以下、各開発環境で、実際に使う例をのせておきました。静的にリンクする方法です。
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
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;
宣言
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ファイルを追加してください。