关于mciSendString打包问题,高手请进!

ArmStronger 2011-07-04 07:48:52
我简单的做了个在Picturebox里播放视频的程序,用到了mciSendString,打包前执行程序没什么问题,但是打包后老是出错:运行时错误 13 ,类型不匹配。代码如下:

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function SetWindowPos Lib "USER32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Sub PlayVideo(vName As String)
'播放视频文件
Dim tmpVal As String, KeyValSize As Long, result As Long

Picture1.ScaleMode = 3
Picture1.BorderStyle = 0
mciSendString "open " & vName & " type MPEGVideo alias Mympg parent " & Picture1.hwnd & " style child WAIT ", vbNullString, 0, 0
tmpVal = String$(256, 0)
KeyValSize = 256
result = mciSendString("STATUS Mympg WINDOW HANDLE WAIT ", tmpVal, KeyValSize, 0)
tmpVal = Left(tmpVal, KeyValSize)
SetWindowPos CLng(tmpVal), 0, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0
mciSendString "play Mympg ", vbNullString, 0, 0
End Sub

Private Sub Form_Activate()
PlayVideo App.Path & "\dj0.wmv"
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
mciSendString "close Mympg ", vbNullString, 0, 0
End Sub


我分析了下,应该是
result = mciSendString("STATUS Mympg WINDOW HANDLE WAIT ", tmpVal, KeyValSize, 0)
这句没有执行成功,导致tmpVal为空,下面调用SetWindowPos 时出错。但是打包后为什么会这样呢,求解!
...全文
163 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 veron_04 的回复:]

引用 13 楼 cfz379945430 的回复:
引用 12 楼 veron_04 的回复:

这个就不好说了,打包的问题?
不大可能啊

我貌似找到问题所在了,好像是路径问题,“/”和“\”的区别,把视频路径里的“\”换成“/”或“\\”就就正常了。。。。
非常感谢你这么热心的帮助,Thanks!

?是吗?我的研究一下才行:)
[/Quote]
是的,刚实验成功了,看了这篇文章才发现http://www.360doc.com/content/10/1023/19/1621700_63374752.shtml
贝隆 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cfz379945430 的回复:]
引用 12 楼 veron_04 的回复:

这个就不好说了,打包的问题?
不大可能啊

我貌似找到问题所在了,好像是路径问题,“/”和“\”的区别,把视频路径里的“\”换成“/”或“\\”就就正常了。。。。
非常感谢你这么热心的帮助,Thanks!
[/Quote]
?是吗?我的研究一下才行:)
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 veron_04 的回复:]

这个就不好说了,打包的问题?
不大可能啊
[/Quote]
我貌似找到问题所在了,好像是路径问题,“/”和“\”的区别,把视频路径里的“\”换成“/”或“\\”就就正常了。。。。
非常感谢你这么热心的帮助,Thanks!
贝隆 2011-07-04
  • 打赏
  • 举报
回复
这个就不好说了,打包的问题?
不大可能啊
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 veron_04 的回复:]

你所谓的打包是不是生成可执行文件?
[/Quote]
不是,制作成安装程序。用vb自带的打包程序打包,或者用setup factory之类的,反正我两个打包好后安装运行都会报错。。。,郁闷
贝隆 2011-07-04
  • 打赏
  • 举报
回复
你所谓的打包是不是生成可执行文件?
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 veron_04 的回复:]

我把SetWindowPos CLng(tmpVal), 0, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0
屏蔽了,可以运行,也能播放
[/Quote]
打包了可以吗?
贝隆 2011-07-04
  • 打赏
  • 举报
回复
我把SetWindowPos CLng(tmpVal), 0, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0
屏蔽了,可以运行,也能播放
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 veron_04 的回复:]

我全编译运行,不行啊
[/Quote]
你的参数路径是不是不对啊,我这里通过的
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 veron_04 的回复:]

我全编译运行,不行啊
[/Quote]
哪里错,我这边好的啊
贝隆 2011-07-04
  • 打赏
  • 举报
回复
我全编译运行,不行啊
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 veron_04 的回复:]

看看上面这段代码中关于mciSendString的用法,是不是你的用错了?
[/Quote]
应该不会错吧,没打包一切正常的啊
ArmStronger 2011-07-04
  • 打赏
  • 举报
回复
一楼的大哥能不能针对我的程序给点建议啊,实在不知道为啥错
贝隆 2011-07-04
  • 打赏
  • 举报
回复
看看上面这段代码中关于mciSendString的用法,是不是你的用错了?
贝隆 2011-07-04
  • 打赏
  • 举报
回复
'Example Name:Ejecting Media from a CDROM

'------------------------------------------------------------------------------
'
' BAS Moduel Code
'
'------------------------------------------------------------------------------
Option Explicit



Public Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long


Private Sub Command1_Click()

Call mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&)

End Sub

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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