有一语句(C)
char *name=SendMessage(hwnd,WM_Command,index,211)
请问如何取得返回的字串信息?
(API应该返回的是字串地址,但VB如何取得字串呢?)

解决方案 »

  1.   

    我这里没有VB,只能凭印象写Dim B As Byte
    CopyMemory VarPtr(B), SendMessage(hwnd,WM_Command,index,211), 1
      

  2.   

    lstrcpy
    lstrlendim lp as long ,llen as long ,s as string
    lp=SendMessage(hwnd,WM_Command,index,byval 211)
    llen=lstrlen(lp)
    s=string(llen," ")
    lstrcpy byval s,byval lp
      

  3.   

    To supergreenbean(超级绿豆) :
    你的方法我试了,但发现它是直接把取得的地址转换成字符串:
    如我取得的lp=4283567
    结果s="4283567"原来语句的说明
    ** char *name=SendMessage(hwnd,WM_COMMAND,index,211);
    ** gets the filename of the filelist entry [index].
    ** returns a pointer to it. returns NULL on error.
    我想应该返回的是一个字串地址吧?To:pigpag(噼里啪啦 - 爽死了!)
    你的方法我也试了,也不行。因为事先不知返回的字串长度(语句说明里没写)
    所以上面这句是C的格式,不知能否转换成VB的安全形式?
      

  4.   

    我现在没法调试,试试这样Dim B() As Byte, Ptr As Long, length As Long
    Ptr = SendMessage(hwnd,WM_Command,index,byval 211)
    length = lstrlen(ByVal Ptr)
    Redim B(Ptr)
    CopyMemory VarPtr(B(0)), SendMessage(hwnd,WM_Command,index,211), 1
    MsgBox StrConv(B, vbUnicode)不过问题应该出在lstrlen(ByVal Ptr)这里,按理说lstrlen()函数声明的时候就应该是byVal的。建议改一下。
      

  5.   

    If length>0 Then Redim B(length - 1)  '上面Redim B(Ptr)写错了,改成此句试试看吧
      

  6.   

    不然用个TEXT控件
    SENDMESSAGE(TEXT.HWND,WM_SETTEXT,255,str_addres)
    然后就可以得到字符了~~~我这几天正好用过这个办法~~~可以的哈~~~呵呵