我简单的做了个在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 LongSub 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 SubPrivate Sub Form_Activate()
PlayVideo App.Path & "\dj0.wmv"
End SubPrivate 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 时出错。但是打包后为什么会这样呢,求解!
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 LongSub 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 SubPrivate Sub Form_Activate()
PlayVideo App.Path & "\dj0.wmv"
End SubPrivate 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 时出错。但是打包后为什么会这样呢,求解!
'
' BAS Moduel Code
'
'------------------------------------------------------------------------------
Option ExplicitPublic 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
屏蔽了,可以运行,也能播放
非常感谢你这么热心的帮助,Thanks!