我简单的做了个在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 时出错。但是打包后为什么会这样呢,求解!

解决方案 »

  1.   

    'Example Name:Ejecting Media from a CDROM '------------------------------------------------------------------------------
    '
    ' 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
      

  2.   

    看看上面这段代码中关于mciSendString的用法,是不是你的用错了?
      

  3.   

    我把SetWindowPos CLng(tmpVal), 0, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, 0
    屏蔽了,可以运行,也能播放
      

  4.   

    不是,制作成安装程序。用vb自带的打包程序打包,或者用setup factory之类的,反正我两个打包好后安装运行都会报错,郁闷
      

  5.   

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

  6.   

    是的,刚实验成功了,看了这篇文章才发现http://www.360doc.com/content/10/1023/19/1621700_63374752.shtml