Конференция "Media" » Midi из ресурсов
 
  • vera (03.02.14 20:18) [0]
    Добрый вечер.

    xe4. нашел вот такой код. под win32 все работает без проблем. под win64 компиляцию проходит успешно, но при активации процедуры вываливает AV. подскажите где беда?

    ________________

    ...
    Uses Windows, Sysutils, Classes, MmSystem, DirectMusic, DirectSound, ActiveX;
    ....

    procedure MyPlayMidiMusic(ResName:PChar);
    begin
    Try
     GuStopMidiMusic;
     Resource:=TResourceStream.Create(hInstance, ResName, RT_RCDATA);
     if Resource=nil then Exit;
     CoInitialize(0);
     CoCreateInstance(CLSID_DirectMusicLoader, nil, CLSCTX_INPROC, IID_IDirectMusicLoader, pLoader);
     CoCreateInstance(CLSID_DirectMusicPerformance, nil, CLSCTX_INPROC, IID_IDirectMusicPerformance, pPerformance);
     pPerformance.Init(pDirectMusic, pDirectSound, 0);
     pPerformance.AddPort(nil);
     Desc.dwSize      :=Sizeof(DMUS_OBJECTDESC);
     Desc.pbMemData   :=Resource.Memory;
     Desc.llMemLength :=Resource.Size;
     Desc.guidClass   :=CLSID_DirectMusicSegment;
     Desc.dwValidData :=DMUS_OBJ_CLASS or DMUS_OBJ_MEMORY;
     pLoader.GetObject(Desc, IID_IDirectMusicSegment, pSegment);
     pSegment.SetParam(GUID_Enable_Auto_Download, Cardinal(-1), 0, 0, @pPerformance);
     pPerformance.PlaySegment(pSegment, 0, 0, nil);
    Except
    // none
    End;
    End;

    ----------------
    в основном модуле под. модуль res

    implementation
    {$R *.dfm}
    {$R my.res}

    в нем
    MI RCDATA      "MI.MID"

    в проге на кнопке

    MyPlayMidiMusic('MI');

    ресурсы компилю как brcc32 my.rc
  • vera (03.02.14 20:20) [1]
    + процедура

    procedure GuStopMidiMusic; // останавливает воспроизвидение
    begin
    Try
     if Resource<>nil then begin
     pPerformance.Stop(pSegment, nil, 0, 0);
     pPerformance.CloseDown;end;
     pSegment := nil;
     pPerformance := nil;
     pLoader := nil;
     if Resource<>nil then Resource.Free;
     Resource:=nil;
    Except
    // none
    End;
    end;

    и общие переменные в начале модуля

    var
    ...
     Resource     : TResourceStream;
     pLoader      : IDirectMusicLoader;
     pPerformance : IDirectMusicPerformance;
     pSegment     : IDirectMusicSegment;
     pDirectMusic : IDirectMusic;
     pDirectSound : IDirectSound;
     Desc         : DMUS_OBJECTDESC;
  • Cobalt © (04.02.14 14:56) [2]
    А на какой строке кода-то AV?
 
Конференция "Media" » Midi из ресурсов
Есть новые Нет новых   [118667   +47][b:0][p:0]