如何在VB中静态调用DLL函数
WIN98中提供了VFW.H和VFW32.lib文件,但没有提供该函数的DLL文件,本人急需调用该LIB文件中的函数,那位高手能告之如何从LIB和头文件调用函数,我的EMAIL是JSRGSUN@CMMAIL.COM 问题点数:50、回复次数:5Top
1 楼jally()回复于 2000-05-29 14:54:00 得分 0
有这两个文件,你大不小用VC自己写一个DLL来满足自己的需要。何必要费这么大劲呢?Top
2 楼Un1()回复于 2000-05-29 23:40:00 得分 0
这些函数在Avicap32.dll中, 以及SendMessage函数的宏!Top
3 楼guoxiaohong()回复于 2000-05-30 11:19:00 得分 0
请问UN1:比如我要调用函数capCreateCaptureWindow和capDriveConnect,如何在VB中使用avicap32.dll和sendmessage?多谢!Top
4 楼sanhan()回复于 2000-05-30 16:05:00 得分 0
如果你用VB3,有一个视频采集控件可以用。
不然最好用C来写。在VB中好象回调比较难处理,麻烦太多,很多人为此专门写控件。Top
5 楼Un1()回复于 2000-05-31 19:26:00 得分 50
申明部分:
'capture window function
Public Const WS_CHILD = &H40000000
Public Const WS_VISIBLE = &H10000000
Public Const MAXVIDDRIVERS = 10
Public Declare Function capCreateCaptureWindow Lib "avicap32" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
Public Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
'capture window messages
Public Const WM_USER = &H400
Public Const WM_CAP_START = WM_USER
'Public Const WM_CAP_UNICODE_START = WM_USER + 100
'Public Const WM_CAP_SET_CALLBACK_ERROR = (WM_CAP_START + 2)
'Public Const WM_CAP_SET_CALLBACK_STATUS = (WM_CAP_START + 3)
'Public Const WM_CAP_SET_CALLBACK_YIELD = (WM_CAP_START + 4)
Public Const WM_CAP_SET_CALLBACK_FRAME = (WM_CAP_START + 5)
'Public Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = (WM_CAP_START + 6)
'Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = (WM_CAP_START + 7)
'Public Const WM_CAP_GET_USER_DATA = (WM_CAP_START + 8)
'Public Const WM_CAP_SET_USER_DATA = (WM_CAP_START + 9)
Public Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)
Public Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)
'Public Const WM_CAP_DRIVER_GET_NAME = (WM_CAP_START + 12)
'Public Const WM_CAP_DRIVER_GET_VERSION = (WM_CAP_START + 13)
'Public Const WM_CAP_DRIVER_GET_CAPS = (WM_CAP_START + 14)
'Public Const WM_CAP_FILE_SET_CAPTURE_FILEA = (WM_CAP_START + 20)
'Public Const WM_CAP_FILE_GET_CAPTURE_FILEA = (WM_CAP_START + 21)
'Public Const WM_CAP_FILE_SAVEASA = (WM_CAP_START + 23)
'Public Const WM_CAP_FILE_SAVEDIBA = (WM_CAP_START + 25)
'// out of order to save on ifdefs
'Public Const WM_CAP_FILE_ALLOCATE = (WM_CAP_START + 22)
'Public Const WM_CAP_FILE_SET_INFOCHUNK = (WM_CAP_START + 24)
'Public Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)
'Public Const WM_CAP_SET_AUDIOFORMAT = (WM_CAP_START + 35)
'Public Const WM_CAP_GET_AUDIOFORMAT = (WM_CAP_START + 36)
Public Const WM_CAP_DLG_VIDEOFORMAT = (WM_CAP_START + 41)
Public Const WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START + 42)
Public Const WM_CAP_DLG_VIDEODISPLAY = (WM_CAP_START + 43)
Public Const WM_CAP_GET_VIDEOFORMAT = (WM_CAP_START + 44)
'Public Const WM_CAP_SET_VIDEOFORMAT = (WM_CAP_START + 45)
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = (WM_CAP_START + 46)
Public Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)
Public Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)
Public Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)
Public Const WM_CAP_SET_SCALE = (WM_CAP_START + 53)
'Public Const WM_CAP_GET_STATUS = (WM_CAP_START + 54)
'Public Const WM_CAP_SET_SCROLL = (WM_CAP_START + 55)
'Public Const WM_CAP_GRAB_FRAME = (WM_CAP_START + 60)
'Public Const WM_CAP_GRAB_FRAME_NOSTOP = (WM_CAP_START + 61)
'Public Const WM_CAP_SEQUENCE = (WM_CAP_START + 62)
'Public Const WM_CAP_SEQUENCE_NOFILE = (WM_CAP_START + 63)
'Public Const WM_CAP_SET_SEQUENCE_SETUP = (WM_CAP_START + 64)
'Public Const WM_CAP_GET_SEQUENCE_SETUP = (WM_CAP_START + 65)
'Public Const WM_CAP_SET_MCI_DEVICEA = (WM_CAP_START + 66)
'Public Const WM_CAP_GET_MCI_DEVICEA = (WM_CAP_START + 67)
'Public Const WM_CAP_STOP = (WM_CAP_START + 68)
'Public Const WM_CAP_ABORT = (WM_CAP_START + 69)
'Public Const WM_CAP_SINGLE_FRAME_OPEN = (WM_CAP_START + 70)
'Public Const WM_CAP_SINGLE_FRAME_CLOSE = (WM_CAP_START + 71)
'Public Const WM_CAP_SINGLE_FRAME = (WM_CAP_START + 72)
'Public Const WM_CAP_PAL_OPENA = (WM_CAP_START + 80)
'Public Const WM_CAP_PAL_SAVEA = (WM_CAP_START + 81)
'Public Const WM_CAP_PAL_PASTE = (WM_CAP_START + 82)
'Public Const WM_CAP_PAL_AUTOCREATE = (WM_CAP_START + 83)
'Public Const WM_CAP_PAL_MANUALCREATE = (WM_CAP_START + 84)
'// Following added post VFW 1.1
'Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = (WM_CAP_START + 85)
Public Const WM_PAINT = &HF
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOMOVE = &H2
Public 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
'video buffer struct
Type VIDEOHDR
lpData As Long '; /* pointer to locked data buffer */
dwBufferLength As Long '; /* Length of data buffer */
dwBytesUsed As Long ' /* Bytes actually used */
dwTimeCaptured As Long ' /* Milliseconds from start of stream */
dwUser As Long ' /* for client's use */
dwFlags As Long ' /* assorted flags (see defines) */
dwReserved(3) As Long '/* reserved for driver */
End Type
......
代码部分:
Private Sub UserControl_Initialize()
If glpLocalBuf Then Err.Raise 47
hWndCap = capCreateCaptureWindow("Local Video", WS_CHILD Or WS_VISIBLE, 0, 0, 0, 0, hwnd, 0)
If hWndCap = 0 Then Err.Raise 7
If SendMessage(hWndCap, WM_CAP_SET_CALLBACK_FRAME, 0, ByVal GetProcAddress(AddressOf VideoCallbackProc)) = 0 Then
DestroyWindow hWndCap
Err.Raise 7
End If
......
明白没?!Top




