为什么打不开avi 文件?(100分)

  • 主题发起人 windflow
  • 开始时间
W

windflow

Unregistered / Unconfirmed
GUEST, unregistred user!
我调用avifil32.dll,打开一个avi文件失败,请看:
function AVIFileOpen(avifile : pointer;
filename : pchar;
mode : integer;
CLSID : pointer) : integer;
stdcall;
external 'avifil32.dll' index 16;
......
var favifile:pointer;

if (AVIFileOpen(@favifile, pchar(AviFileName), 0, nil) <> 0) then

exit;
函数返回不为0,就是打开失败!!
什么原因?
 
我试过你的代码,可以打开啊,只要文件名正确,返回为0,
检查一下,你用的什么操作系统?错误码是啥?文件名对吗?
或者文件格式不标准(我试过了,假的 .AVI 也会报错)?
 
我经过测试,在win98下没有问题,但是在win2000 pro下死活不行。
要打开的avi文件我在win2000,win98都能用mediaplayer打开,说明文件应该没问题。
如果是驱动的问题为什么用mediaplayer又能打开?
另外我发现win98下的avifil32.dll与win2000的不一样(大小都不一样),我想把2000下
的avifil32.dll更换为win98的,但是win2000下的avifil32.dll根本都不给更改,说是
windows 在使用。我现在没办法了!
 
有可能这个AVI是MPEG4
必须有此解码方可打开!
 
我可是试过了很多个avi文件,包括vc里有一个count8r.avi文件,这个只有25K,在win98下都
能打开,但是在2000下一个都不行。
 
是你W2K系统问题。
 
我在别的2K机子也试过,也是这样,是不是少了什么配置?
 
if (AVIFileOpen(@favifile, pchar(AviFileName), 0, nil) <> 0) then

exit;
你的函数使用有些问题啊?第三个参数0好像表示要创建AVI文件啊,而不是你需要的打开
操作,
if (AVIFileOpen(@favifile, pchar(AviFileName), OF_SHARE_DENY_READ, nil) <> 0) then

exit;
或者
if (AVIFileOpen(@favifile, pchar(AviFileName), OF_READ, nil) <> 0) then

exit;
还是不行的话就要分析一下函数的返回值的意思了。

下面是这个函数的返回值,比较一下,看到底是哪个
AVIERR_BADFORMAT The file couldn't be read, indicating a corrupt file or an unrecognized format.
AVIERR_MEMORY The file could not be opened because of insufficient memory.
AVIERR_FILEREAD A disk error occurred while reading the file.
AVIERR_FILEOPEN A disk error occurred while opening the file.
REGDB_E_CLASSNOTREG According to the registry, the type of file specified in AVIFileOpendo
es not have a handler to process it.
 
函数的返回值不是上面中的任何一个;$800401F0
 
看看你的Avi文件可能有问题,我指的问题是压缩问题,以前使用Ulead Gif Ani*做了一个Avi
的文件,然后打开,选择不同的压缩形式不一样,我记得好像有几种是打不开的。你可以
试试打开其它的Avi文件。
 
我用vc实现了,关鍵都没有说对。
 
在AVIFileOpen之前首先执行AVIFileInit就可以了。大概是这样的:
AVIFileInit;
AVIFileName:='C:/MyCap.AVI';
AVIFileOpen(FAVIFile,PChar(AVIFileName),OF_READ,nil);
 
顶部