在VB程序中调用VC++编写的DLL,其中有的函数参数涉及到指针,而VB不支持指针类型,各相关的书籍中只讲到可按引用(或者说按地址传递)的方式声明,但具体到调用该函数时,要获得这个地址将如何进行?
  比如:VC++编写的DLL中有如此函数
        BOOL Hik_PlayM4_InputData(Long nPort,PBYTE pBuf,DWORD nSize);
     说明:这是一个视频采集卡的SDK软件包中输入从卡上得到的数据流指定大小的数据缓冲区中。
     其中:nPort是通道号
           pBuf是缓冲区地址
           nSize是缓冲区大小
     请问:pBuf这个缓冲区地址在VB中如何来获得?

解决方案 »

  1.   

    VarPtr、ObjPtr、StrPtrVarPtr()函数获取变量地址
    ObjPrt()函数获取对象地址
    StrPtr()函数获取字符串内存地址
      

  2.   

    To:pigpag(噼里啪啦)   如果要读取一个地址里的数据怎么办?(地址里是简单的字符串)
      

  3.   

    请使用API函数,CopyMemory
    CopyMemory ByRef ReturnValue, ByVal Address, ByVal ByteReturnValue 用来接收返回值的ByRef的变量。
    Address 内存地址
    Byte 字节数注意,字符串的Byte和编码有关。到底是Unicode还是其他编码要弄清楚。
      

  4.   

    Declare Function  Lib 你的DLL (ByVal nPort As Long, ByRef pBuf As Long, ByVal nSize As Long) As Long
      

  5.   

    To:pigpag(噼里啪啦) 我用的动态连接库名是Trsbp.dll 。
    内含函数:TRSbp_cmd ,
    函数原型:int  TRSbp_cmd(TRS_CMD *trs_cmd,TRS_RESULT *trs_result);
    主要参数:trs_cmd──命令结构体,trs_result──结果结构体。命令结构体TRS_CMD
    定义
    typedef struct trs_cmd
    {
    char CmdId;
    char CmdLen[4+1];
    char *CmdBuf;
    }TRS_CMD;结果结构体TRS_RESULT
    定义
    typedef struct trs_result
    {
    char Status;
    char Rows[4+1];
    char Cols[4+1];
    char ResultLen[8+1];
    char *ResultBuf;
    }TRS_RESULT;在vb中该怎么做呀,请指教!
      

  6.   

    没法转换,因为结构体的元素的地址没有对其对于没有对其的情况:
    VC:没对其没有关系,保证地址正确
    VB:强制对其
    如果直接翻译的话,VB声明是这个样子:
    public type TRS_CMD
        CmdId as byte
        CmdLen(0 to 4) as byte
        CmdBuf as long
    end type可在VC中看,是这样:
    typedef struct trs_cmd
    {
    char CmdId;
    char CmdLen[4+1];
             BYTE     fillbytes[2];
    char *CmdBuf;
    }TRS_CMD;
      

  7.   

    同up
    这种情况很讨厌的。有关于指针的操作,最好大部分封装在C编写的模块里面。
    比如吧,对于这些结构的操作,全部放入C中处理,利用VB调用函数,对结构进行构造。
    比如,简单例子:
    typedef struct aa{
      char A;
      char B;
    }AA;
    编写一个C的过程,
    void LetAA(char A, char B){
    构造一个aa,赋值,返回地址
    }在VB中调用LetAA。
    不过可行性……不知有没有。主要是作用域的问题。
      

  8.   

    最好是用C编写“翻译DLL”,其中提供一些能将VB不容易接受的参数类型进行转化的中间函数。