void CTest_ControlApiDlg::OnGetSn() 
{
UpdateData(true);
// UINT Times1;
// Times1=0;
unsigned char pucBuf[8];
memset(pucBuf,0,8);

epsRet=epas_GetProperty(m_hToken,EPAS_PROP_SERNUM,0,pucBuf,sizeof(pucBuf));
if(FT_SUCCESS != epsRet)
{
sprintf(Buf,"GetSn,Error Num=%d",epsRet);
AfxMessageBox(Buf, MB_OK | MB_ICONERROR);
// epsRet = epas_CloseDevice(m_hToken);
// epsRet = epas_DeleteContext(m_hToken);
m_hToken = NULL;
return ;
}
m_1=pucBuf[0];
m_2=pucBuf[1];
m_3=pucBuf[2];
m_4=pucBuf[3];
m_5=pucBuf[4];
m_6=pucBuf[5];
m_7=pucBuf[6];
m_8=pucBuf[7];
UpdateData(false);

}epas_GetProperty
    EPAS_HANDLE hContextHandle,       // [in]
    unsigned long ulFlags,             // [in]
    void* pRefData,                   // [in]
    void* pPropData,                  // [in][out]
    unsigned long ulPropSize          // [in]
hContextHandle 
[in] 指向一个设备句柄的上下文的指针
ulFlags 0x07
pRefData 
[in] 为将来扩展保留的。设为零。
pPropData 
[in] sn: 
ulPropSize 
[in] sn长度 
我是这样在vb中申明的
Private Declare Function epas_GetProperty Lib "ePassNDapi.dll" (hContextHandle As Long, ulFlags As Long, pRefData As Long, pPropData() As Any, ByVal ulPropSize As Long) As Long
这样申明对吗?该如何调用

解决方案 »

  1.   

    VC代码如下:
    void CTest_ControlApiDlg::OnGetSn() 
    {
    UpdateData(true);
    // UINT Times1;
    // Times1=0;
    unsigned char pucBuf[8];
    memset(pucBuf,0,8);

    epsRet=epas_GetProperty(m_hToken,EPAS_PROP_SERNUM,0,pucBuf,sizeof(pucBuf));
    if(FT_SUCCESS != epsRet)
    {
    sprintf(Buf,"GetSn,Error Num=%d",epsRet);
    AfxMessageBox(Buf, MB_OK | MB_ICONERROR);
    // epsRet = epas_CloseDevice(m_hToken);
    // epsRet = epas_DeleteContext(m_hToken);
    m_hToken = NULL;
    return ;
    }
    m_1=pucBuf[0];
    m_2=pucBuf[1];
    m_3=pucBuf[2];
    m_4=pucBuf[3];
    m_5=pucBuf[4];
    m_6=pucBuf[5];
    m_7=pucBuf[6];
    m_8=pucBuf[7];
    UpdateData(false);

    }
      

  2.   

    继承没法转换。
    sizeof可以用len代替。sprintf不知道用什么替换。
    数组的指针pucBuf用pucBuf(0)可以传递。
    总的来说,这段代码没有转换的意义,因为不是用标准的API函数来做的。
      

  3.   

    我只要知道epas_GetProperty这个函数在vb中怎么申明,怎么调用,其他的可以不管,因为我在vb中申明的时候,调用后,返回值是0,是正确的,但要返回的sn我取不出来
      

  4.   

    继承没法转换。
    sizeof可以用len代替。sprintf不知道用什么替换。
    数组的指针pucBuf用pucBuf(0)可以传递。
    总的来说,这段代码没有转换的意义,因为不是用标准的API函数来做的
    同意
      

  5.   

    这是个Vc++写的dll,我想在VB中调用,但只有VC++的例子,我不要转化,只想知道在VB中怎么调用,这个dll的其它函数,我都调用成功了,就这个不行
      

  6.   

    Private Declare Function epas_GetProperty Lib "ePassNDapi.dll" (ByVal hContextHandle As Long, ByVal ulFlags As Long, ByVal pRefData As Long, pPropData() As Any, ByVal ulPropSize As Long) As LongPrivate Sub OnGetSn()
        Dim pucBuf(7) As Byte
        Const EPAS_PROP_SERNUM = &H7
        memset pucBuf, 0, 8
        UpdateData (True)
        epsRet = epas_GetProperty(m_hToken, EPAS_PROP_SERNUM, 0, pucBuf, Len(pucBuf))
        If FT_SUCCESS <> epsRet Then
            'sprintf(Buf,"GetSn,Error Num=%d",epsRet); 这两句不懂怎么转换
            'AfxMessageBox(Buf, MB_OK | MB_ICONERROR);
            Set m_hToken = Nothing  '这个不知是否正确
            Exit Sub
        End If
        m_1 = pucBuf(0)
        m_2 = pucBuf(1)
        m_3 = pucBuf(2)
        m_4 = pucBuf(3)
        m_5 = pucBuf(4)
        m_6 = pucBuf(5)
        m_7 = pucBuf(6)
        m_8 = pucBuf(7)
        UpdateData(false)
    End Sub水平有限,见谅!