如何在VB中静态调用DLL函数

guoxiaohong 2000-05-29 02:30:00
WIN98中提供了VFW.H和VFW32.lib文件,但没有提供该函数的DLL文件,本人急需调用该LIB文件中的函数,那位高手能告之如何从LIB和头文件调用函数,我的EMAIL是JSRGSUN@CMMAIL.COM
...全文
276 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2000-05-31
  • 打赏
  • 举报
回复
申明部分:

'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

......


明白没?!
guoxiaohong 2000-05-30
  • 打赏
  • 举报
回复
请问UN1:比如我要调用函数capCreateCaptureWindow和capDriveConnect,如何在VB中使用avicap32.dll和sendmessage?多谢!
sanhan 2000-05-30
  • 打赏
  • 举报
回复
如果你用VB3,有一个视频采集控件可以用。
不然最好用C来写。在VB中好象回调比较难处理,麻烦太多,很多人为此专门写控件。
Un1 2000-05-29
  • 打赏
  • 举报
回复
这些函数在Avicap32.dll中, 以及SendMessage函数的宏!
江王 2000-05-29
  • 打赏
  • 举报
回复
有这两个文件,你大不小用VC自己写一个DLL来满足自己的需要。何必要费这么大劲呢?
NiceBASIC测试版3是新型编程工具跟 VC,VB,DELPHI类似。 NiceBASIC测试版3 上传日期:2008年12月13日11:02:21 NiceBASIC文编程语言,是采用类似BASIC语法,并兼有C++的一些高级特性(比如:指针操作运算、自动化类、重载函数、重载操作符等等)集于一身的全文关键字的编程语言,简称NB。NB内置有标准BASIC函数库,和图像库(用于编写游戏),还可以使用标准C语言函数库里的函数调用静态库形式链接),也就是说NB可以在编译时链接所有用标准C语言编写的静态库(LIB)做为函数功能扩展,并且还可以调用WIN32API的大部分函数,已经在内部定义声明,直接引用即可,就像C++的WINDOWS开发包。并且NB的编译器是永久免费的,除了可以编译自身的源码外,还可以编译RC资源脚本,合成到可执行文件,NB的编译器提供了构建完整标准应用程序的所有功能。 其独特个性化的全文式编程模式,更易于国人理解和方便学习编程,不用懂英文也可以编写自己的程序软件。变量和函数等标识符名称,也可以用文表示,方便于源码的交流和省略注释说明。 NB可以编译四种类型的可执行文件: 控制台程序。类似于DOS界面的命令行提示符,但只能运行在WIN32平台。 WINDOWS图形界面程序。调用系统的WIN32API来构建GUI窗体组件。 WIN32 DLL 动态链接库。导出函数可以为多种调用约定,比如:Stdcall(标准WINAPI)、 Cdecl(兼容C语言)、Pascal 。可供给其它语言使用。 静态链接库。供给标准的C语言调用链接。就是说NB的静态库是兼容C语言的LIB,互相通用。

7,763

社区成员

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

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