一个已经被别人封装好的.LIB,和一个.H文件,现在我想用VB调用LIB里面的所有方法。但是有些参数不知道应该如何弄。LIB是已经被封装的,看不见里面的代码。
原形:
extern "C" {
#endiftypedef void *LMUSB_HANDLE;LMUSB_HANDLE __stdcall InitializeDevice(unsigned short usVID,
unsigned short usPID,
LPGUID lpGUID,
BOOL *pbDriverInstalled);
BOOL __stdcall TerminateDevice(LMUSB_HANDLE hHandle);
BOOL __stdcall WriteUSBPacket(LMUSB_HANDLE hHandle,
unsigned char *pcBuffer,
unsigned long ulSize,
unsigned long *pulWritten);
DWORD __stdcall ReadUSBPacket(LMUSB_HANDLE hHandle,
unsigned char *pcBuffer,
unsigned long ulSize,
unsigned long *pulRead,
unsigned long ulTimeoutMs,
HANDLE hBreak);
以上四个函数需要转成VB能用的。我改了一些,如:把LMUSB_HANDLE定义全局的了。所以其他函数里面可以省略这个参数了。
BOOL CTCtrl::Init()
{
BOOL bDriverInstalled;
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_LUMINARY_BULK),
&bDriverInstalled);
if (hUSB)
{
return TRUE;
}
else
{
return FALSE;
}
}BOOL CTCtrl::Write(LPCTSTR pcBuffer, long ulSize, long *pulWritten)
{
BOOL bOk = FALSE;
bOk = WriteUSBPacket(hUSB,(unsigned char*)pcBuffer,ulSize,(unsigned long *)pulWritten); if(bOk)
{
return TRUE;
}
else
{
return FALSE;
}
return FALSE;
}BOOL CTCtrl::Read(LPCTSTR pcBuffer, long ulSize, long *pulRead, long ulTimeoutMs,long hBreak)
{
DWORD dwError; dwError=ReadUSBPacket(hUSB,(unsigned char*)pcBuffer,(unsigned long)ulSize,(unsigned long *)pulRead,(unsigned long)ulTimeoutMs,(HANDLE)hBreak); if (dwError != ERROR_SUCCESS)
{
return FALSE;
}
else
{
return TRUE;
}
}BOOL CTCtrl::Exit()
{
BOOL bOk = FALSE; bOk = TerminateDevice(hUSB); if (bOk)
{
return TRUE;
}
else
{
return FALSE;
}
}
最后:调用的时候,VB里面可以找到上面4个方法,但是每个方法里面的参数全都不见了。 请高手指点。
原形:
extern "C" {
#endiftypedef void *LMUSB_HANDLE;LMUSB_HANDLE __stdcall InitializeDevice(unsigned short usVID,
unsigned short usPID,
LPGUID lpGUID,
BOOL *pbDriverInstalled);
BOOL __stdcall TerminateDevice(LMUSB_HANDLE hHandle);
BOOL __stdcall WriteUSBPacket(LMUSB_HANDLE hHandle,
unsigned char *pcBuffer,
unsigned long ulSize,
unsigned long *pulWritten);
DWORD __stdcall ReadUSBPacket(LMUSB_HANDLE hHandle,
unsigned char *pcBuffer,
unsigned long ulSize,
unsigned long *pulRead,
unsigned long ulTimeoutMs,
HANDLE hBreak);
以上四个函数需要转成VB能用的。我改了一些,如:把LMUSB_HANDLE定义全局的了。所以其他函数里面可以省略这个参数了。
BOOL CTCtrl::Init()
{
BOOL bDriverInstalled;
hUSB = InitializeDevice(BULK_VID, BULK_PID,
(LPGUID)&(GUID_DEVINTERFACE_LUMINARY_BULK),
&bDriverInstalled);
if (hUSB)
{
return TRUE;
}
else
{
return FALSE;
}
}BOOL CTCtrl::Write(LPCTSTR pcBuffer, long ulSize, long *pulWritten)
{
BOOL bOk = FALSE;
bOk = WriteUSBPacket(hUSB,(unsigned char*)pcBuffer,ulSize,(unsigned long *)pulWritten); if(bOk)
{
return TRUE;
}
else
{
return FALSE;
}
return FALSE;
}BOOL CTCtrl::Read(LPCTSTR pcBuffer, long ulSize, long *pulRead, long ulTimeoutMs,long hBreak)
{
DWORD dwError; dwError=ReadUSBPacket(hUSB,(unsigned char*)pcBuffer,(unsigned long)ulSize,(unsigned long *)pulRead,(unsigned long)ulTimeoutMs,(HANDLE)hBreak); if (dwError != ERROR_SUCCESS)
{
return FALSE;
}
else
{
return TRUE;
}
}BOOL CTCtrl::Exit()
{
BOOL bOk = FALSE; bOk = TerminateDevice(hUSB); if (bOk)
{
return TRUE;
}
else
{
return FALSE;
}
}
最后:调用的时候,VB里面可以找到上面4个方法,但是每个方法里面的参数全都不见了。 请高手指点。
long __stdcall Initialize(unsigned short usVID, unsigned short usPID, LPGUID lpGUID, BOOL *pbDriverInstalled);
BOOL __stdcall Terminate(long handle);
BOOL __stdcall Write(long handle, unsigned char *pcBuffer, unsigned long ulSize, unsigned long *pulWritten);
DWORD __stdcall Read(long handle, unsigned char *pcBuffer, unsigned long ulSize, unsigned long *pulRead, unsigned long ulTimeoutMs, long hbreak);在dll内部把long转换成LMUSB_HANDLE和HANDLE