![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с ACM (Audio Compression Manager). [D6, D7, WinXP]
Blacked © (2003-01-30 02:05:00)Я пытаюсь получить информацию об Драйверах и постоянно возникает ошибка:
Access violation at address 00000010. Read of adress 00000010.
Испробывал уже всё что можно. Делал отладку, немогу найти проблему.
Использую MSACM.pas от JEDI http://www.delphi-jedi.org/.
Может кто сталкивался...
часть исходника:
//==============================================================================
function FormatEnumProc(hACMDrvId: HACMDRIVERID; ACMFmtDet: TACMFormatDetails;
dwInstance: DWord; fdwSupport: DWord): LONGBOOL; stdcall;
begin
...
...
Result:=True; // Продолжить поиск всёх форматов
ShowMessage("Сейчас вылитит птичка ERROR!!!");
end;
//==============================================================================
function DriverEnumProc(hACMDrvId: HACMDRIVERID;
dwInstance: DWORD; fdwSupport :DWORD): BOOL; stdcall;
var
ACMDrvDet: TACMDriverDetails;
ACMFmtDet: TACMFormatDetails;
WaveFormatEx: TWaveFormatEx;
MaxSize : Word;
hACMDrv : HACMDriver;
begin
if fdwSupport=ACMDRIVERDETAILS_SUPPORTF_CODEC then
begin
ACMDrvDet.cbStruct:=SizeOf(ACMDrvDet);
if acmDriverDetails(hACMDrvId, ACMDrvDet, 0) = 0 then
if HiWord(ACMDrvDet.vdwACM)<=HiWord(acmGetVersion) then
if ACMDrvDet.fdwSupport and ACMDRIVERDETAILS_SUPPORTF_CODEC > 0 then
begin
// Заполним бокс драйвера
SelectFormatForm1.DriverBx1.Items.Add(ACMDrvDet.szShortName);
// Инициализируем структуры
FillChar(WaveFormatEx,SizeOf(WaveFormatEx),#0);
FillChar(ACMFmtDet,SizeOf(TACMFormatDetails),#0);
hACMDrv:=nil;
if acmDriverOpen(hACMDrv,hACMDrvId,0) <> 0 then Result:=False;
// Получим максимальный размер формата
MaxSize:=0;
if acmMetrics(HACMOBJ(hACMDrv),ACM_METRIC_MAX_SIZE_FORMAT,MaxSize) <> 0 then Result:=False;
if MaxSize<SizeOf(WaveFormatEx) then MaxSize:=SizeOf(WaveFormatEx);
WaveFormatEx.cbSize:=LoWord(MaxSize)-SizeOf(WaveFormatEx);
WaveFormatEx.wFormatTag:=0;
// Устанавливаем формат для получения параметров
ACMFmtDet.cbStruct:=SizeOf(ACMFmtDet);
ACMFmtDet.pwfx:=@WaveFormatEx;
ACMFmtDet.cbwfx:=MaxSize;
ACMFmtDet.dwFormatTag:=0;
// Пытаемся получить всё форматы
if acmFormatEnum(hACMDrv,ACMFmtDet,@FormatEnumProc,Integer(SelectFormatForm1),0) <> 0 then Result:=False;
acmDriverClose(hACMDrv,0);
end;
end;
Result:=True; // Продолжить поиск всёх драйверов
end;
//==============================================================================
procedure TSelectFormatForm1.InitSelFormat;
begin
// ТУТ НАЧАЛО ВСЕГО
acmDriverEnum(@DriverEnumProc,Integer(Self),ACM_DRIVERENUMF_DISABLED);
end;
//==============================================================================
Blacked (2003-01-30 17:22:00) [1]Нет народ, так не пойдёт. Мне не нужны компоненты, мне надо имено на API. Может кто уже писал подобную прогу и скинит часть исходника.
savva (2003-01-30 14:47:00) [2]>Владимир Васильев © (30.01.03 14:38)
>так что проверяй почту :).
спасибо:)))
Владимир Васильев (2003-01-30 14:38:00) [3]Это не мои компоненты и в данный момент их новая версия распространяется автором как Shareware , - но опубликованы они в своё время были под Mozilla Public License - так что проверяй почту :).
savva (2003-01-30 12:19:00) [4]> Владимир Васильев © (30.01.03 10:20)
> Проверяй почту.
ну так не интересно.. может в кладовку?:)))
Владимир Васильев (2003-01-30 10:20:00) [5]Проверяй почту.