例如:
Public Const UERDEF_Connect = &HA011
我要将这个&HA011转换成DWORD类型传到VC程序的接口,请教如何转换?

解决方案 »

  1.   

    CLng(UERDEF_Connect)转换以后,VC接收还是占了N个字节的数字,不是dword类型
      

  2.   

    回复人: firechun(天火) ( ) 信誉:97  2004-03-29 11:20:00  得分:0 
     
     
      VC的DWORD类型在VB中声明为Long
      
      

  3.   

    现在问题使这样的,如:
    dim iNum as integer
    dim buff(2) as Byte
    iNum = 11
    buff = StrConv(CLng(iNum ), vbFromUnicode)转换后的BYTE数组是:
    buff(0) = "49"        1的asc码
    buff(1) = "49"        1的asc码我把这个buff转换回来就出错了,因为在MSDN中Integer 变量以带符号的 16 位(2 个字节)整数形式存储。
    请教如何转换成BYTE,然后再转换回来
      

  4.   

    iNum = StrConv(buff, vbUnicode)
    Debug.Print iNum
      

  5.   

    把你的C函数贴上来吧,传的话的确是应该
    func(byval clng(UERDEF_Connect),....)
    或者把你的常量声明变成
    Public Const UERDEF_Connect As Long= &HA011

    Public Const UERDEF_Connect= &HA011&
    然后调用
    func(byval UERDEF_Connect,....)
      

  6.   

    VC接收处理的代码
    CopyMemory((PWORD)&CmdHead,(PVOID)&pOverlappedEx->buf[0],sizeof(WORD));
    if(CmdHead == DEFUSE_CONNECT)
    {
         //比较是否是这个命令,然后处理。。
    }
      

  7.   

    CmdHead与DEFUSE_CONNECT都是WORD,也就是都是Integer的吧,那还何必转成DWORD?
    要把Integer放到Byte数组里可以用CopyMemory
    Dim b(1) As Byte
    Dim iNum As Integer
    CopyMemory b(0),ByVal iNum,2
      

  8.   

    同上//我把这个buff转换回来就出错了,因为在MSDN中Integer 变量以带符号的 16 位(2 个字节)整数形式存储。你用strconv转换当然不行(它是转化字串的函数,即使你用了clng,它也还是会隐式将数字转化为字串,这是产生错误的原因)一个解决的办法是进行内存复制,用CopyMemory另一个解决的办法是用位运算:
    Option ExplicitPrivate Sub Command1_Click()
        Dim buff() As Byte
        buff = IntToByteArray(3456)
        MsgBox buff(0)
        MsgBox buff(1)
    End SubPrivate Function IntToByteArray(ByVal num As Integer) As Byte()
        Dim buff(1) As Byte
        buff(0) = num \ 2 ^ 8 '右移8位,得高位
        buff(1) = num And 255 '取低位
        IntToByteArray = buff
    End Function