HMODULE bassmidi=GetModuleHandle("bassmidi.dll");
if (bassmidi) { // BASSMIDI loaded
HSOUNDFONT (WINAPI *BASS_MIDI_FontInit)(const void *file, DWORD flags)
=GetProcAddress(bassmidi, "BASS_MIDI_FontInit");
BOOL (WINAPI *BASS_MIDI_StreamSetFonts)(HSTREAM handle, const BASS_MIDI_FONT *fonts, DWORD count)
=GetProcAddress(bassmidi, "BASS_MIDI_StreamSetFonts");
BASS_MIDI_FONT sf;
sf.font=BASS_MIDI_FontInit("chorium.sf2", 0);
if (sf.font) { // soundfont opened
sf.preset=-1; // use all presets
sf.bank=0; // use default bank(s)
BASS_MIDI_StreamSetFonts(0, &sf, 1); // set default soundfont
}
}//=========我是這樣學著轉的,但是轉不過來
var
  bassmidi: HMODULE;
  sf: BASS_MIDI_FONT;
  sfont: HSOUNDFONT;
  ...???
begin
  bassmidi := GetModuleHandle('bassmidi.dll');//bassmidi.dll 是一個庫文件
  if ... then
  begin
    sf.font :=BASS_MIDI_FontInit("chorium.sf2", 0);//chorium.sf2是一個音色文件
    ...????
    if ... then  // soundfont opened
    begin
      sf.preset :=-1; // use all presets
      sf.bank :=0; // use default bank(s)
    end;
    BASS_MIDI_StreamSetFonts(0, sf, 1); // set default soundfont
  end;//不知道上面可不可以提示大家轉換?我沒用過C...
//謝謝你的幫忙!

解决方案 »

  1.   

    你需要看的是delphi里面COM的用法,去找本书自己看一下这部分吧,很简单的,人家讲也讲不清楚的,最终还是需要你自己看.推荐delphi5开发人员指南
      

  2.   

    大概就转成这样吧,type
      //尚未声明BASS_MIDI_FONT,HSTREAM
      P_BASS_MIDI_FONT = ^BASS_MIDI_FONT;  F_BASS_MIDI_FontInit= function(const file:PChar;flags:DWORD):HSOUNDFONT;stdcall;
      F_BASS_MIDI_StreamSetFonts= function(handle:HSTREAM;const fonts:P_BASS_MIDI_FONT;count:DWORD):BOOL;stdcall;
    var
      bassmidi: HMODULE;
      sf: BASS_MIDI_FONT;
      sfont: HSOUNDFONT;  BASS_MIDI_FontInit:F_BASS_MIDI_FontInit;
      BASS_MIDI_StreamSetFonts :F_BASS_MIDI_StreamSetFonts;
    begin
      bassmidi := GetModuleHandle('bassmidi.dll');//bassmidi.dll 是一個庫文件
      if (bassmidi<>nil) then
      begin
        BASS_MIDI_FontInit:=GetProcAddress(bassmidi,'BASS_MIDI_FontInit');
        BASS_MIDI_StreamSetFonts:=GetProcAddress(bassmidi,'BASS_MIDI_StreamSetFonts');    sf.font :=BASS_MIDI_FontInit('chorium.sf', 0);//chorium.sf2是一個音色文件    if (sf.font > 0) then  // soundfont opened
        begin
          sf.preset :=-1; // use all presets
          sf.bank :=0; // use default bank(s)
          BASS_MIDI_StreamSetFonts(0, @sf, 1); // set default soundfont    end;
      end;
    end;
      

  3.   


    这是一个DLL动态调用的代码吧.数据类型不熟悉,所以下面的转换代码可能无法编译,只是根据语法进行了一些转换.楼主自己再分析下吧. :)
    type
      TBASS_MIDI_STREAM_Ref=function (const AFile;  flags:DWORD):HSOUNDFONT stdcall;
      TBASS_MIDI_FontInit_Ref=function (handle:HSTREAM, var fonts:BASS_MIDI_FONT;  count:DWORD):boolean;stdcall;var
      dllHandle:THandle=0;
      MIDI_STREAM_REF:TBASS_MIDI_STREAM_Ref;
      MIDI_FONTINIT_REF:TBASS_MIDI_FontInit_Ref;
      sf:BASS_MIDI_FONT;try
     dllhandle:=loadlibrary('bassmidi.dll');
     if dllhandle>0 then
      begin
        MIDI_STREAM_REF:=GetProcAddress(dllHandle, "BASS_MIDI_StreamSetFonts");
        IF  MIDI_STREAM_REF>0 THEN
          begin
            sf:=MIDI_FONTINIT_REF('chorium.sf2',0);
            if sf.font>0 then
               begin
                 sf.preset:=-1;
                 sf.bank:=0;
                 MIDI_STREAM_REF(0,@sf,1);
               end;
          end;  end;
    finally
    freelibary('bassmidi.dll');
    enb;
      

  4.   

    衷心謝謝以上的大俠,經過修改,已經編譯通過並可用了,沒有你們的提示俺是做不了D, :-)
    特別感謝  回复人:do2008(事情做好了,才是事情) ( 一星(中级)) 信誉:100
    以及  回复人:dinglinger(红辣椒) ( 五级(中级)) 信誉:100
    給出正確的翻譯代碼://==============================================
    type
      P_BASS_MIDI_FONT = ^BASS_MIDI_FONT;  F_BASS_MIDI_FontInit = function(const sfile: PChar; flags: DWORD): HSOUNDFONT; stdcall;
      F_BASS_MIDI_StreamSetFonts = function(handle: HSTREAM; const fonts: P_BASS_MIDI_FONT; count: DWORD): BOOL; stdcall;//======================================
    var
      bassmidi: HMODULE;
      sf: BASS_MIDI_FONT;
      sfont: HSOUNDFONT;
      
      BASS_MIDI_FontInit: F_BASS_MIDI_FontInit;
      BASS_MIDI_StreamSetFonts: F_BASS_MIDI_StreamSetFonts;
    //======================================
      bassmidi := GetModuleHandle('bassmidi.dll');
      if (bassmidi <> 0) then
      begin
        BASS_MIDI_FontInit := GetProcAddress(bassmidi, 'BASS_MIDI_FontInit');
        BASS_MIDI_StreamSetFonts := GetProcAddress(bassmidi, 'BASS_MIDI_StreamSetFonts');    sf.font := BASS_MIDI_FontInit('Chorium.SF2', 0);    if (sf.font > 0) then // soundfont opened
        begin
          sf.preset := -1; // use all presets
          sf.bank := 0; // use default bank(s)
          BASS_MIDI_StreamSetFonts(0, @sf, 1); // set default soundfont
        end;
      end;
    //=======================================