-
Добрый вечер.
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
-
+ процедура
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;
-
А на какой строке кода-то AV?
|