一个已经被别人封装好的.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个方法,但是每个方法里面的参数全都不见了。 请高手指点。

解决方案 »

  1.   

    编译成DLL或者COM组件,VB才能调用
      

  2.   

    dll导出接口
    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