我按照开发文档里的说明,调用OpenDriver这个API函数,打开神龙卡的驱动程序,为什么总是出错?返回值是0 Public Declare Function OpenDriver(ByVal lpDriverName as String, ByVal lpSectionName as String, ByVal lParam as long) as Longdim Iopen as Long Iopen= OpenDriver("reeldrv",0,0) 请高手指点以上代码错在哪里? 在VC里用下面的代码可以正常打开 HDRVR hReelDrv = OpenDriver(“ReelDrv”, NULL, NULL);
lpSectionName 是String型的,你怎么用0传给它?
我改成Public Declare Function OpenDriver Lib "winmm.dll" Alias (ByVal szDriverName As String, ByVal szSectionName As Any, ByVal lParam2 As Any) As LongDim Iopen As Long Iopen = OpenDriver("reeldrv", ByVal 0&, ByVal 0&) 结果还是不行
#define DRV_COMMAND DRV_USER+1#define MAKEWORD(low,high) ((WORD) (((BYTE)(low)) | (((WORD) ((BYTE)(high)))<<8))) #define MAKEDWORD(a,b) MAKELPARAM(a,b)#define FMPCommand(a,b,c,d) SendDriverMessage(hReelDrv,DRV_COMMAND,MAKELPARAM(MAKEWORD(a,b),c),d)#include "fmpmacs.h" // These macros can now be called exactly as you would in DOS { HDRVR hReelDrv = OpenDriver(“ReelDrv”, NULL, NULL); if( !hReelDrv) { MessageBox ( NULL, "ReelMagic driver is not installed.", szError, MB_ICONASTERISK | MB_OK); }// Your app hereCloseDriver(hReelDrv,NULL,NULL); } 哪位大哥能帮忙注释一下上面的VC代码吗?这是官方提供的VC演示代码,我只会VB,看不懂VC 我得用VB语言重写上面的代码
路过的帮我顶啊
Public Declare Function OpenDriver(ByVal lpDriverName as String, ByVal lpSectionName as String, ByVal lParam as long) as Longdim Iopen as Long
Iopen= OpenDriver("reeldrv",0,0)
请高手指点以上代码错在哪里?
在VC里用下面的代码可以正常打开
HDRVR hReelDrv = OpenDriver(“ReelDrv”, NULL, NULL);
Iopen = OpenDriver("reeldrv", ByVal 0&, ByVal 0&)
结果还是不行
#define MAKEDWORD(a,b) MAKELPARAM(a,b)#define FMPCommand(a,b,c,d) SendDriverMessage(hReelDrv,DRV_COMMAND,MAKELPARAM(MAKEWORD(a,b),c),d)#include "fmpmacs.h"
// These macros can now be called exactly as you would in DOS
{
HDRVR hReelDrv = OpenDriver(“ReelDrv”, NULL, NULL);
if( !hReelDrv)
{
MessageBox ( NULL,
"ReelMagic driver is not installed.",
szError,
MB_ICONASTERISK | MB_OK);
}// Your app hereCloseDriver(hReelDrv,NULL,NULL);
}
哪位大哥能帮忙注释一下上面的VC代码吗?这是官方提供的VC演示代码,我只会VB,看不懂VC
我得用VB语言重写上面的代码
我建议你不要试图用VB改写VC代码,这样又费马达又费电不说,而且有些功能无法用VB实现.例如指针.
您可以用VC写个调用神龙卡的Dll,然后用VB调用该Dll。
二、
可以用Win32的API——MCI来操作神龙卡,也可以用RealMagic提供的FMP。由于FMP实际上也是封装了MCI的若干函数集,所以在VC中直接用RealMagic提供的FMP,比用MCI要简单方便些。
三、
关于调用MCI,请详细参阅RealMagic的MCIPLAY例程序。
关于调用FMP,请详细参阅RealMagic的FMPPLAY例程序。
四、
楼主贴出的示例代码是打开RealMagic驱动的。在VB中直接调用是不行(我试过,但为什么会这样,我也不太清楚)。
你可以这样(具体的变量定义可以查看MSDN):
MCI_DGV_OPEN_PARMS mciMO;
MCI_PLAY_PARMS mciPlay; DWORD dwResult,dwFlags;
//通过打开文件对话框选定一个文件
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilterSpec;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAXFILENAME;
ofn.lpstrInitialDir = NULL;
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = MAXFILENAME;
ofn.lpstrTitle = NULL;
ofn.lpstrDefExt = "TXT";
ofn.Flags = 0;
GetOpenFileName ((LPOPENFILENAME)&ofn)
//打开驱动设备
mciMO.lpstrDeviceType="MpegVideo";
mciMO.lpstrElementName=ofn.lpstrFile;
mciMO.lpstrAlias=0;
mciMO.dwCallback=0;
mciMO.wDeviceID=0;mciMO.dwStyle=WS_CHILD|WS_BORDER|WS_DISABLED;
mciMO.hWndParent=hWnd;
dwFlags=(DWORD)(MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT|MCI_DGV_OPEN_WS);dwResult=mciSendCommand(0,MCI_OPEN,dwFlags,(DWORD)(LPMCI_DGV_OPEN_PARMS) &mciMO);
//然后就可以Play、SetVolume等等了...
五、如果你用VB完成了对神龙卡的操作或还具体遇到什么问题,请Mail:[email protected]
六、上述不尽正确,有错请指正。
我建议你不要试图用VB改写VC代码,这样又费马达又费电不说,而且有些功能无法用VB实现.例如指针.
您可以用VC写个调用神龙卡的Dll,然后用VB调用该Dll。
二、
可以用Win32的API——MCI来操作神龙卡,也可以用RealMagic提供的FMP。由于FMP实际上也是封装了MCI的若干函数集,所以在VC中直接用RealMagic提供的FMP,比用MCI要简单方便些。
三、
关于调用MCI,请详细参阅RealMagic的MCIPLAY例程序。
关于调用FMP,请详细参阅RealMagic的FMPPLAY例程序。
四、
楼主贴出的示例代码是打开RealMagic驱动的。在VB中直接调用是不行(我试过,但为什么会这样,我也不太清楚)。
你可以这样(具体的变量定义可以查看MSDN):
MCI_DGV_OPEN_PARMS mciMO;
MCI_PLAY_PARMS mciPlay; DWORD dwResult,dwFlags;
//通过打开文件对话框选定一个文件
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilterSpec;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAXFILENAME;
ofn.lpstrInitialDir = NULL;
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = MAXFILENAME;
ofn.lpstrTitle = NULL;
ofn.lpstrDefExt = "TXT";
ofn.Flags = 0;
GetOpenFileName ((LPOPENFILENAME)&ofn)
//打开驱动设备
mciMO.lpstrDeviceType="MpegVideo";
mciMO.lpstrElementName=ofn.lpstrFile;
mciMO.lpstrAlias=0;
mciMO.dwCallback=0;
mciMO.wDeviceID=0;mciMO.dwStyle=WS_CHILD|WS_BORDER|WS_DISABLED;
mciMO.hWndParent=hWnd;
dwFlags=(DWORD)(MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT|MCI_DGV_OPEN_WS);dwResult=mciSendCommand(0,MCI_OPEN,dwFlags,(DWORD)(LPMCI_DGV_OPEN_PARMS) &mciMO);
//然后就可以Play、SetVolume等等了...
五、如果你用VB完成了对神龙卡的操作或还具体遇到什么问题,请Mail:[email protected]
六、上述不尽正确,有错请指正。
七、写了将近半小时,多少也应该给点分意思一下吧!反正不是钱。