目标:
在VBA(目前在VB环境下调试)环境下实现一段C++程序的功能。情景:
计算机连接一USB接收塔,等待外部传入信号。软件环境:
C++程序源代码。EXCEL XP, VB 6, VC++ 6, MSDN。USB接收塔驱动。
==================================================================问题:指针类型如何转入VB? 我把不解的地方在下面的代码上标出来了。C++代码:int unpackRcxMessage(BYTE* pbyMessage, int nBytes, BYTE* pbyCommand) 
//////////////////////////////////
//此处*是指直接读取变量的值?VB中如何表达?ByVal pbyMessage As Byte, 
//ByVal nBytes As Long, ByVal pbyCommand As Byte?
//////////////////////////////////
{
  int m = 0;
  int n = 0;
  int sum = 0;  // Make sure it has the right header format: 0x55 0xFF 0x00
  if ((pbyMessage[n++] != 0x55) || (pbyMessage[n++] != 0xFF) || (pbyMessage[n++] != 0x00))
    {return 0;}
//////////////////////////////////
//此处pbyMessage[n++],如何在VB中表达?
//////////////////////////////////
  // Verify that every 2nd byte is a 1's complement of the byte before it,
  // and calculate the checksum:
  while (n < (nBytes-2))
  {
    // Every other byte should be a complement:
    if (pbyMessage[n] != (0xFF & (~pbyMessage[n+1])))
//////////////////////////////////
//此处(0xFF & (~pbyMessage[n+1]))如何转换?
//////////////////////////////////
      {return 0;}
//////////////////////////////////
//return 0;是否等同于functionname=0 exit function?有没有更简单的方法?
//////////////////////////////////
    pbyCommand[m++] = pbyMessage[n];
    sum += pbyMessage[n];    n += 2;
  }
...
}
int main(int argc, char* argv[])
{
  BYTE byBuffer[256];
  BYTE byCommand[128];
  DWORD dwBytes = 0;
  DWORD dwNewBytes = 0;
  int n;
...
  while (!kbhit())
  {
    // See if there is a new byte of input available:
    dwNewBytes = 0;    if ((ReadFile(hUsbTower, byBuffer+dwBytes, 1, &dwNewBytes, NULL))
     &&  (dwNewBytes > 0))
    {
      dwBytes = dwBytes + dwNewBytes;      for (n=0; (n+9)<=dwBytes; n++)
      {
        if (2 == unpackRcxMessage(byBuffer, 9, byCommand))
          {
            if (0xF7 == byCommand[0])
            printf("Message Received: 0x%02X\n", byCommand[1]);            dwBytes = dwBytes - (n + 9);
           }
      }
    // Otherwise, discard the first byte in the buffer and test again:
      if (dwBytes >= 9)
      {
        for (int n=0; n<(dwBytes-1); n++)
        byBuffer[n] = byBuffer[n+1];
        dwBytes -= 1;
      }
    }
  }
...
}谢谢大家!

解决方案 »

  1.   

    //////////////////////////////////
    //此处*是指直接读取变量的值?VB中如何表达?ByVal pbyMessage As Byte, 
    //ByVal nBytes As Long, ByVal pbyCommand As Byte?
    //////////////////////////////////方法:
    定义一个long型和byte型的变量,然后用copymemory这个api进行赋值
    //////////////////////////////////
    //此处pbyMessage[n++],如何在VB中表达?
    //////////////////////////////////方法:
    n=n+1
    pbyMessage(n)=………………
    //////////////////////////////////
    //此处(0xFF & (~pbyMessage[n+1]))如何转换?
    //////////////////////////////////方法:&HFF And (255-pbyMessage(n+1))
    //////////////////////////////////
    //return 0;是否等同于functionname=0 exit function?有没有更简单的方法?
    //////////////////////////////////方法:就是等于
    functionname=0 : exit function