用WaveInit创建对象正常,但是用WaveFree释放后,再创建显示的就是黑的 而且很不稳定偶尔一两次还会奇迹般的可以 sub q()   
Dim ret As Long
  DoEvents
  ret = WaveInit(Me.hwnd, Me.Picture.Handle, 30, sRound)
  If ret = 1 Then Unload Me
end sub
就是调用上面这个方法
然后用wavefree释放后 更换窗体背景图片 再调用 但是显示的就是黑的的了

解决方案 »

  1.   

    也就这点代码了声明还要?
    Public Enum WaveShape
        sRound   '圆形水波
        sEllipse '椭圆型水波
    End Enum
    Declare Function WaveInit Lib "WaveObj.dll" Alias "_WaveInit" _
            (ByVal hwnd&, ByVal hBmp&, ByVal dwSpeed&, ByVal dwType As WaveShape) As Long
    Public Enum WaveType
        wClose  '关闭特效
        wrain   '下雨
        wlaunch '汽艇
        wWaves  '风浪
    End Enum
    Declare Sub WaveEffect Lib "WaveObj.dll" Alias "_WaveEffect" _
            (ByVal dwType As WaveType, ByVal dwParam1&, ByVal dwParam2&, ByVal dwParam3&)
    Declare Sub WaveDropStone Lib "WaveObj.dll" Alias "_WaveDropStone" _
            (ByVal dwX&, ByVal dwY&, ByVal dwSize&, ByVal dwWeight&)Declare Sub WaveUpdateFrame Lib "WaveObj.dll" Alias "_WaveUpdateFrame" (ByVal bIfForce As Boolean)Declare Sub WaveFree Lib "WaveObj.dll" Alias "_WaveFree" ()
    Private Sub Form_Activate()
        Dim ret As Long
        DoEvents
        ret = WaveInit(Me.hwnd, Me.Picture.Handle, 30, sRound)
        If ret = 1 Then Unload Me
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim LClickCount As Long
        '    Randomize
        If Button = 1 Then
            WaveDropStone X, Y, 2, 256
        Else
            LClickCount = Rnd * 3
            Select Case LClickCount
              Case 0
                WaveEffect wlaunch, 5, 4, 250
              Case 1
                WaveEffect wWaves, 250, 4, 8
              Case 2
                WaveEffect wrain, 5, 4, 150
              Case 3
                WaveEffect wClose, 0, 0, 0
            End Select
        End If
    End Sub
    Private Sub Timer1_Timer()
    WaveFree
    me.picture.handle=loadpicture("c:\1.jpg")
    Dim ret As Long
        DoEvents
        ret = WaveInit(Me.hwnd, Me.Picture.Handle, 30, sRound)
        If ret = 1 Then Unload Me
    End Sub
      

  2.   

    能不能提供一个WaveObj.Dll的下载??
      

  3.   

    dbcontrols
    (泰山)sRound这个在waveobj.dll里应该是已经赋值了  因为没用wavefree释放对  是没问题的 一切正常
      

  4.   

    http://21.dc.ftn.qq.com/ftn_handler/541cf1ac8ca8eb538dd3511075de56c9ba4881d8a72c6dfe978e018e00105d17a22078c9d2998faa04458b67404689b167a7bd3948e7eb7877f00a41e57a1039/WaveObj.dll?k=2330356230dacaccb950e56b1630001c02095453540651574e545457041d0105065218030051041e52010007520503550756505b303b35640246502d525a1b570f5c355f&fr=01&&txf_fid=2af79d4165f05d22379ff3821c89752bb3184473WaveObj.dll下载链接   迅雷
      

  5.   

    谁会动态调用dll?就想看看动态调用dll能不能解决   用 LoadLibaray 和GetProcAddress 得到dll地址后
    怎么用下面的?或者还有其他更好的?
     Dim abyAsmCode(MAX_NUM) As Byte  然后用以下汇编代码对应的机器码填充之:     push <倒数第1个参数地址>
         push <倒数第2个参数地址>
         push ...
         push <第一个参数地址>
         jmp < AAA地址 >(2)然后像这样调用:    Call CallWindowProc(VarPtr(abyAsmCode(0)),0,0,0,0)
    ???
      

  6.   

    试过了不是这个问题  sRound的值是=0  我创建对象的时候都直接用0代替他了   依然是第一次没问题 用wavefree释放后黑了
      

  7.   

    释放或刷新一次窗体,Me.Refresh
      

  8.   

    很郁闷的说还是没用 都用上UNload  了 
      

  9.   

    应该是WaveObj.dll这个模块内部有问题了,难道说这个模块用WaveFree释放对象后就不能用了?不过要是不用WaveFree释放对象,一直用Waveinit创建新对象  内存也会耗竭的 最悲剧的是在内存还没耗竭之前 几次调用Waveinit 后也黑了  
      

  10.   

    想试试动态调用dll,哎 先去加班了  麻烦各位再帮忙想想  万分感谢
      

  11.   

    那孤帆改过的这个 知道咋解决 wavefree后黑屏问题不?
      

  12.   

    哇哈哈   大笑!!!
    动态加载WaveObj.dll,问题解决了
    就此结账