天啊,这么奇怪的问题,怎么解决?高手帮帮忙!

andynjust 2009-07-04 11:04:34
我用 vfw 在MFC 单文档编了个读取 avi 视频的某一帧图片,显示到软件的视图区!在我自己的电脑上运行结果完全正确!可以把那帧图像显示出来!

可是,我把这个程序拷贝到别的电脑上运行,却没有结果,就是打不开相同的avi 视频文件!!!!再放到我电脑上运行,还是正确的!

两台电脑都装了vc ++,也没提示缺少什么文件!!!

如果想试试的话,可以留下邮箱或者联系方式, avi 视频文件6M ,软件也不到1M ,我发给你试试,真郁闷,这么奇怪的问题,都不知道从哪里解决!!!!
...全文
527 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyxie 2009-07-05
  • 打赏
  • 举报
回复
当然是在其他电脑上也装 directshow
andynjust 2009-07-05
  • 打赏
  • 举报
回复
按照楼上各位的说法,我把那几个 dll 都拷贝到其他电脑,还是不行啊!!

我记起来了,我的电脑还装了 directshow ,其他电脑没装!

是不是这个的原因?

那 我怎么知道要把 directshow 里面的哪些库文件或者 dll 拷贝到其他电脑啊?

andynjust 2009-07-05
  • 打赏
  • 举报
回复
谢谢各位的热心帮忙,问题解决了!

原因是那个 avi 视频是用“电脑摄像机”这个软件录制的,我试过了,在那些没装这个软件的电脑都不能使用我的软件,而装了后,就可以使用,应该是这个软件安装过程中在系统文件夹 加入了相应的解码需要的 dll 文件!!!!

谢谢大家!
oyljerry 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 andynjust 的回复:]
引用 16 楼 skyxie 的回复:
当然是在其他电脑上也装 directshow



那有没有其他方法,可以使自己编的软件有通用性,而不是在其他每台电脑都装 directshow 才可以使用啊?

我用您说的MFC 链接库那里设置了 静态链接,然后重新编译,那个exe 文件确实是变大了很多,但是在其他电脑仍然不能运行啊

您的这个方法,它是不是把运行软件所需要的dll 文件都打包到exe 文件里面了啊?如果是这样,那为什么还是不能打开avi …
[/Quote]
带上DirectShow runtime
http://www.microsoft.com/downloads/details.aspx?FamilyID=7a80170a-06c8-4893-8845-6c4e926d8607&displaylang=zh-tw
Snow_Ice11111 2009-07-05
  • 打赏
  • 举报
回复
AVI是史上格式最混乱的一类文件,有多种编码方式,它们的文件后缀名都叫.avi。你在无法正常运行的机器上安装一下完美解码后再试试,这时应该就可以打开了。
andynjust 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 skyxie 的回复:]
当然是在其他电脑上也装 directshow
[/Quote]

那有没有其他方法,可以使自己编的软件有通用性,而不是在其他每台电脑都装 directshow 才可以使用啊?

我用您说的MFC 链接库那里设置了 静态链接,然后重新编译,那个exe 文件确实是变大了很多,但是在其他电脑仍然不能运行啊

您的这个方法,它是不是把运行软件所需要的dll 文件都打包到exe 文件里面了啊?如果是这样,那为什么还是不能打开avi 文件呢?
在其他电脑上编译时没错的,就是打不开avi 文件!

谢谢
andynjust 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 skyxie 的回复:]
引用 12 楼 andynjust 的回复:
引用 3 楼 skyxie 的回复:
在失败的机器上,用dependency walker打开你的exe,看看缺什么库~


我用您介绍的这个软件打开那个exe文件后,有两个警告:

警告: 至少有一个延时加载模块没找到。
警告: 由于在延时加载依赖模块中丢失导入函数,至少有一个模块具有不能解析的导入。

还有说打开 MSJAVA.DLL 这个文件出错,系统找不到指定的文件(2)。

这什么意思?


目标机…
[/Quote]

那就是还需要把这个 dll 和 msvfw32.dll 这两个都拷贝到其他机器?
skyxie 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 andynjust 的回复:]
引用 3 楼 skyxie 的回复:
在失败的机器上,用dependency walker打开你的exe,看看缺什么库~



我用您介绍的这个软件打开那个exe文件后,有两个警告:

警告: 至少有一个延时加载模块没找到。
警告: 由于在延时加载依赖模块中丢失导入函数,至少有一个模块具有不能解析的导入。

还有说打开 MSJAVA.DLL 这个文件出错,系统找不到指定的文件(2)。

这什么意思?
[/Quote]
目标机器上缺 MSJAVA.DLL
andynjust 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 skyxie 的回复:]
在失败的机器上,用dependency walker打开你的exe,看看缺什么库~
[/Quote]

我用您介绍的这个软件打开那个exe文件后,有两个警告:

警告: 至少有一个延时加载模块没找到。
警告: 由于在延时加载依赖模块中丢失导入函数,至少有一个模块具有不能解析的导入。

还有说打开 MSJAVA.DLL 这个文件出错,系统找不到指定的文件(2)。

这什么意思?
oyljerry 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 andynjust 的回复:]
引用 8 楼 oyljerry 的回复:
vfw.lib等属于DirectX相关类库,你其他机器上虽然装了VC,但不一定装了这个sdk,你把vfw相关的dll等带上



可是,我不知道它调用了哪几个 dll 啊?您能否告诉我?
我在程序里面就包含了 #include"vfw.h"
然后在编译选项 Link 那里加上了 VFW32.lib

其他地方都没调用什么头文件啊!
[/Quote]
在你可以的机器上找找vfw32.dll,然后程序exe带上这个dll到别的机器
andynjust 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 oyljerry 的回复:]
vfw.lib等属于DirectX相关类库,你其他机器上虽然装了VC,但不一定装了这个sdk,你把vfw相关的dll等带上
[/Quote]

可是,我不知道它调用了哪几个 dll 啊?您能否告诉我?
我在程序里面就包含了 #include"vfw.h"
然后在编译选项 Link 那里加上了 VFW32.lib

其他地方都没调用什么头文件啊!
skyxie 2009-07-04
  • 打赏
  • 举报
回复
project菜单(或class view上选中项目名,右键)--properties--configuration properties -- general -- use of MFC 选 static link
oyljerry 2009-07-04
  • 打赏
  • 举报
回复
vfw.lib等属于DirectX相关类库,你其他机器上虽然装了VC,但不一定装了这个sdk,你把vfw相关的dll等带上
andynjust 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 skyxie 的回复:]
或者项目属性 -- 静态链接到MFC库 (这样你的exe会大很多)
[/Quote]

这个选项在哪里?好像一开始建立MFC文档的时候我见过,但是现在工程完成了,还可以这样设置么?
谢谢
andynjust 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 neohope 的回复:]
解码器带过去了吗?
[/Quote]

还需要特定的解码器?系统自带播放器不能打开么?
skyxie 2009-07-04
  • 打赏
  • 举报
回复
或者项目属性 -- 静态链接到MFC库 (这样你的exe会大很多)
neohope 2009-07-04
  • 打赏
  • 举报
回复
解码器带过去了吗?
skyxie 2009-07-04
  • 打赏
  • 举报
回复
在失败的机器上,用dependency walker打开你的exe,看看缺什么库~
andynjust 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
播放avi的控件以及相关用到的库文件是否带到其他机器上,估计应该还是相关文件没有带上
[/Quote]

我里面就用了个 vfw 的文件:就是在编译的链接中加入了:vfw32.LIB

然后程序里面是用

AVIFileInit();//初始化AVI函数库
AVIFileOpen(&pAviFile,lpszPathName,OF_SHARE_DENY_WRITE,0L);//打开AVI文件
AVIFileGetStream(pAviFile,&pAviStream,streamtypeVIDEO,0L);//打开流
AVIStreamInfo(pAviStream,&aviStrInfo,sizeof(AVISTREAMINFO));//获取流的信息
long lStreamSize;//流格式长度
pBmpInfoH=new BITMAPINFOHEADER;//pBmpInfoH 是文档类的成员变量
AVIStreamFormatSize(pAviStream,0,&lStreamSize);//获取流的格式信息的长度
AVIStreamReadFormat(pAviStream,0L,pBmpInfoH,&lStreamSize);
PGETFRAME pgf;
pgf=AVIStreamGetFrameOpen(pAviStream,NULL);//为解压帧做准备

//解压出第100帧,(紧压缩DIB的数据)以返回值pData 为数据的起始地址
pData = (LPBYTE)AVIStreamGetFrame(pgf,100);//文档类成员变量,类型为 LPBYTE

.............
...........




这些代码读取某一帧的!!

vfw 的库文件,不是windows 系统自带的么?
oyljerry 2009-07-04
  • 打赏
  • 举报
回复
播放avi的控件以及相关用到的库文件是否带到其他机器上,估计应该还是相关文件没有带上

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧