代码:
dim str as string
str = "123abc"
debug.print strptr(str) & vbtab & varptr(str)结果:
1697860  1242732
请问:这两个地址分别代表什么意思,有何不同?

解决方案 »

  1.   

    MSDN里面有篇文章提到了这两个函数,通过索引查看VarPtr function,自己看看吧。
      

  2.   

    IMHELLFIRE(不懂那么多,只懂一点点!) :
    MSDN里面有篇文章提到了这两个函数???这个问题 是BSTR 与 VARIANT1.Visual Basic 使用被称为 BSTR 的 String 数据类型,它是由自动化(以前被称为 OLE自动化)定义的数据类型。一个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的 null 值。BSTR 是以指针的形式进行传递的,因而 DLL 过程能够修改字符串。(指针是一个变量,包含另外一个变量的内存地址,而不是数据。) BSTR 是 Unicode 的,即每个字符需要两个字节。BSTR 通常以两字节的 null 字符结束2.Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public 或 Static等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。
    Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 Empty、Error、Nothing 及 Null等特殊值。可以用 VarType 函数或 TypeName 函数来决定如何处理 Variant 中的数据。
    数值数据可以是任何整型或实型数,负数时范围从-1.797693134862315E308 到 -4.94066E-324,正数时则从 4.94066E-324 到 1.797693134862315E308。通常,数值 Variant 数据保持为其 Variant 中原来的数据类型。例如,如果把一个 Integer赋值给 Variant,则接下来的运算会把此 Variant 当成 Integer 来处理。然而,如果算术运数针对含 Byte、Integer、Long 或 Single 之一的Variant 执行,并当结果超过原来数据类型的正常范围时,则在 Variant 中的结果会提升到较大的数据类型。如 Byte 则提升到 Integer,Integer 则提升到 Long,而 Long和Single 则提升为 Double。当 Variant 变量中有 Currency、Decimal 及 Double 值超过它们各自的范围时,会发生错误。
    可以用 Variant 数据类型来替换任何数据类型,这样会更有适应性。3.在 ActiveX/COM 中 Variant 是对各种数据类型的统一封装4.在
    dim str as string
    str = "123abc"
    debug.print strptr(str) & vbtab & varptr(str)
    中:
    strptr(str) 取回的是 BSTR 的地址
    varptr(str) 取回的是 BSTR被封装到VARIANT中后,VARIANT的地址
      

  3.   

    噢!这个是这样varptr 返回变量地址
    strptr 返回字符数组地址可一用copymemory函数试试
      

  4.   

    难道不是吗?
    VarPtr and StrPtr
    We have discussed the function VarPtr already, but not in connection with strings. The functions VarPtr and StrPtr are not documented by Microsoft, but they can be very useful, so we will use them often, particularly the VarPtr function.If var is a variable, we have seen that:VarPtr(var)is the address of that variable, returned as a long. If str is a BSTR variable, then:StrPtr(str)gives the contents of the BSTR! These contents are the address of the Unicode character array pointed to by the BSTR.
      

  5.   

    感谢各位的帮忙,继续请教:
    我本意是在VC中通过消息发一个字符串给VB,用SendMessage函数, 
    wParam 是字符串长度, lParam 是字符串地址VB接收端代码如下:
    ...........
    Dim strReceive As String
    strReceive = Space(wParam)
    CopyMemory ByVal StrPtr(strReceive), ByVal lParam, wParam
    strReceive = StrConv(strReceive, vbUnicode)
    MsgBox strReceive结果: 显示乱码
    请指教
      

  6.   

    发送过来的字符串是ansi的,还是unicode?