(13)、BOOL GetData(void* pCommand, void* pDataBuffer, int nSize)
功能:获取数据
参数:void* pCommand:无类型指针,由StartICDMCommand()函数返回
void* pDataBuffer:无类型指针,接收数据缓存区
int nSize:接收数据的大小
返回:TRUE or FALSE
表示获取数据成功或失败================================
我这样做的:
声明:
Private Declare Function GetData Lib "ICDM.dll" (ByVal pCommand As Long, ByVal pDataBuffer As string, ByVal nSize As Long) As Long调用:
Dim nAdr As String * 255
Dim k As Boolean
k = GetData(m_pReturn, nAdr, nLength)=======================================
调用后k为true了,但是nAdr没变,是否哪里写的不对
功能:获取数据
参数:void* pCommand:无类型指针,由StartICDMCommand()函数返回
void* pDataBuffer:无类型指针,接收数据缓存区
int nSize:接收数据的大小
返回:TRUE or FALSE
表示获取数据成功或失败================================
我这样做的:
声明:
Private Declare Function GetData Lib "ICDM.dll" (ByVal pCommand As Long, ByVal pDataBuffer As string, ByVal nSize As Long) As Long调用:
Dim nAdr As String * 255
Dim k As Boolean
k = GetData(m_pReturn, nAdr, nLength)=======================================
调用后k为true了,但是nAdr没变,是否哪里写的不对
k = GetData(m_pReturn, nAdr, 255)
nLength是前面一个api使用后得到的
这两个参数似乎没有问题,主要是中间那个,我哪不准缓冲区的写法和取得。基本按照getcomputername来的,但是结果成功返回k后,缓冲区里竟然没有数据。
Private Declare Function GetData Lib "ICDM.dll" (ByVal pCommand As Long, ByVal pDataBuffer As long, ByVal nSize As Long) As Long
dim nAdr as long,s as string
k = GetData(m_pReturn, nAdr, nLength)
s=space(nLength)
copymemory s,nAdr,nLength
不行再换:
Private Declare Function GetData Lib "ICDM.dll" (ByVal pCommand As Long, pDataBuffer As Any, ByVal nSize As Long) As Long
dim a() as byte,s as string
redim a(nLength-1)
k = GetData(m_pReturn, a(0), nLength)
s=strconv(a,vbunicode)
因为用这个的时候s=space(nLength),先为" ",返回为4个方块的形式,相当于Dim nAdr As String * 4
(11)void* StartICDMCommand(void* pDevice, int nAddress, int nCommand,
void* pParameters = NULL, int nSizeOfParameter = 0)
功能:发送命令,必须与EndICDMCommand()配套使用
参数:void* pDevice:无类型指针,由OpenDevice()函数返回
int nAddress:目标地址
int nCommand:发送命令字,取枚举变量HD_CMD的值,其定义见节二
void* pParameters:指向传递参数的无类型指针
int nSizeOfParameter:传递参数的大小,以字节计
返回:无类型指针
例:
void* m_pReturn;
int nAdr, nLength;
SetWaitTime(m_pDevice, 1000);
m_pReturn = StartICDMCommand(m_pDevice, 0, nSearchDM, NULL, 0);// 寻机
if (m_pReturn != NULL)
if (GetCmdResult(m_pReturn) == nRecvSuccess)
{
nLength = GetSizeOfData(m_pActReturn);
GetData(m_pReturn, &nAdr, nLength);
}
EndICDMCmd(m_pReturn);
===================================
我这样声明的,pParameters 里有很多不同类型的结构,只能用any
Private Declare Function StartICDMCommand Lib "ICDM.dll" (ByVal pDevice As Long, ByVal nAddress As Long, ByVal nCommand As Long, pParameters As Any, ByVal nSizeOfParameter As Long) As Long
Private Declare Function GetData Lib "ICDM.dll" (ByVal pCommand As Long, ByVal pDataBuffer As long, ByVal nSize As Long) As Long
dim nAdr as long,a() as byte,s as string
k = GetData(m_pReturn, nAdr, nLength)
redim a(nLength-1)
copymemory a(0),byval nAdr,byval nLength
s=strconv(a,vbunicode)
Private Declare Function GetData Lib "ICDM.dll" (ByVal pCommand As Long, ByVal pDataBuffer As long, ByVal nSize As Long) As Long
dim nAdr as long,a() as byte,s as string
redim a(nLength-1)
k = GetData(m_pReturn, varptr(a(0)), nLength)