#define a 30 #define b 8  // 8 byte(64 bits)typedef struct tagID{ unsigned short Address; // ID号在标签内存中的地址unsigned short Length; // ID号字节数unsigned char Num[a][b]; // 存放ID号的字节数组} rfs_ID;现在有这样个函数 自己DLL 的连接库提供的rfs_ReadLabelID(HANDLE hScanner, int nMax, rfs_ID *IDBuffer, int *nCounter)现在我要把rfs_ID *IDBuffer 的内容读出来COPYMEMORY 怎么写 应该 

解决方案 »

  1.   

    这里好像是VB的版块啊!!!!
    首先申明我对VC不熟。Copymemory的前两个参数本身就是指针型的,直接写应该就行了吧。
    我想,IDBurrer本身就是指针变量,假设有另一个数组或结构otherBuffer,在VC里面应该可以 CopyMemory(otherBuffer,IDBurrer,数据长度)
    在VB里面调用它时,因为定义CopyMemory这个API时,前两个参数要ByRef 变量名 as Any,表示传指针,然后就可以直接用数组的某个下标或结构变量名做参数。不知道我说对没有,如果错了请不要骂我。
      

  2.   

    只要把你的dll函数导出。
    rfs_ReadLabelID(ByVal long hScanner, ByVal nMax as long, ByRef IDBuffer as rfs_ID, ByRef nCounter as long)然后在VB中按照VC申明结构rfs_ID直接调用rfs_ReadLabelID即可。
      

  3.   

    在VB里的定义的
    Declare Function rfs_ReadLabelID lib"rf.dll" ( _
        ByVal hScanner As Long, _
        ByVal nMax As Long, _
        ByRef IDBuffer As rfs_ID, _
        ByRef nCounter As Long _
    ) As apiReturnType rfs_ID
        Address As Integer                     'ID号在标签内存中的地址
        Length As Integer                      'ID号字节数
        num(b* a) As Byte           '存放ID号的字节数组
    End TypeDim str As Long调用后下面的
    rfs_ReadLabelID m_hScanner, num, IDBuffer, nCounter
    结果是 IDBuffer.Address 的值为0 应该是对的 是开始地址
    IDBuffer.Length  的字节书为8 应该是对的
    b的值为8Byte
    nCounter的值赋给a   值 1..30 CopyMemory str, IDBuffer.num(b * a), 4 ??? 对不对?
    假设 a 是30 IDBuffer.num(b * a)应该为240Byte吧 怎么一次读8byte的值?
      

  4.   

    问题基本解决了呵呵 谢谢大家啊
    其实问题不是 函数定义的问题
    关键是 怎么把8BYTE 的读出来
    我用的方法笨比较 呵呵
    但基本解决了