AVIFileOpen не создает AVI файл - ошибка REGDB_E_CLASSNOTREG
От: PeterOfLight  
Дата: 17.02.11 08:19
Оценка:
В моей программе создается новый AVI файл через функцию AVIFileOpen из Vfw. Примерно у 1% пользователей эта функция не работает и возвращает результат REGDB_E_CLASSNOTREG Подскажите пожалуйста где у меня ошибка, не могу понять что не так, ведь вызываю всего две базовые функции с минимумом параметров, дело даже не доходит до выбора кодека или аудио или запись фреймов. Вот кусок кода (Delphi):


procedure CreateFile(FN: String);
var
  Result:     DWORD;
  AviFile:    PAVIFileA;
begin
  AviFile:=nil;
 
  CoInitialize(nil);
  AVIFileInit;
  Result:=AVIFileOpen(AviFile, PChar(FN), OF_CREATE or OF_WRITE, nil);

  if Result<>0 then begin
    if Result=REGDB_E_CLASSNOTREG then Assert(False);
    Exit;
  end;

  if AviFile<>nil then AviFileRelease(AviFile);
  AVIFileExit;
end;


// Выдержка из хедера Vfw.pas:

PAVIFILEINFOA               = ^TAVIFILEINFOA;
TAVIFILEINFOA               = record
    dwMaxBytesPerSec        : DWORD;        // max. transfer rate
    dwFlags                 : DWORD;        // the ever-present flags
    dwCaps                  : DWORD;
    dwStreams               : DWORD;
    dwSuggestedBufferSize   : DWORD;
    dwWidth                 : DWORD;
    dwHeight                : DWORD;
    dwScale                 : DWORD;
    dwRate                  : DWORD;        // dwRate / dwScale == samples/second
    dwLength                : DWORD;
    dwEditCount             : DWORD;
    szFileType              : array[0..63] of AnsiChar;
end;


procedure   AVIFileInit; stdcall;   // Call this first!
procedure   AVIFileInit; stdcall; external AVIFILDLL; // Call this first!

function    AVIFileOpenA(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall;
function    AVIFileOpen(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall; // AVIFileOpenA

function    AVIFileOpenA(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall; external AVIFILDLL;
function    AVIFileOpen(var ppfile: PAVIFILE; szFile: LPCSTR; uMode: UINT; lpHandler: PCLSID): HResult; stdcall;  external AVIFILDLL name 'AVIFileOpenA';
avi файл avifileopen regdb_e_classnotreg ошибка
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.