在VC中,调用dll的函数说明及调用过程如下:
typedef int (PASCAL *pgetname)(BYTE *buf);
typedef int (PASCAL *pUCmmand1)(BYTE *pcmd,int *p1,int *p2,int *p3);pUCmmand1 mygetcard;
pgetname        myget;
void CReadCardDlg::OnTimer(UINT nIDEvent) 

BYTE cmd;
int  parg0,parg1,parg2;
parg0=1;
parg1=8811;
parg2=9986;
cmd=0x43;
int z=mygetcard(&cmd,&parg0,&parg1,&parg2);
if(z==62171)
{
parg0=1;
cmd=0x44;
parg1=8811;
char *x;
x="c:\\mycard";
int p[20];
memcpy(p,x,10);
mygetcard(&cmd,&parg0,&parg1,p);
    myget(buffer);     
AfxMessageBox((char *)buffer);

}
    CDialog::OnTimer(nIDEvent);
} 以上调用如何用vb来实现?主要是下边的字符串地址传递问题,请教各位高手.

解决方案 »

  1.   

    BYTE *声明成Byval As String就可以了
      

  2.   

    也可以声明为byref buf as byte,然后传递buf的第1个元素
      

  3.   

    在VB中的声明和调用过程是这样:
    Private Declare Function UCommand1 Lib "RdCard.dll" (ByRef pComd As Long, ByRef parg0 As Long, ByRef parg1 As Long, ByRef parg2 As Long) As Long调用第一次的指令,进行连接:
    Dim result As Long
    result = UCommand1(65, 0, 8811, 9986)
    然后继续调用,进行读卡:
    result = UCommand1(67, 0, 8811, 9986) '验卡
    第三步,读卡信息,与mygetcard(&cmd,&parg0,&parg1,p)类似,在四个参数中,前三个可以固定,例如:
    result = UCommand1(68, 1, 8811, ) '读卡信息
    但是第四个参数需要传一个char*型的数据进去,如何实现?
      

  4.   

    dim data(1000) as byte
    传递data(0)的地址byval VarPtr(data(0))
    result = UCommand1(68, 1, 8811, byval VarPtr(data(0)))
      

  5.   

    还是不太明白,能否明示?在的三次调用的时候有问题,需要在前两次调用的基础上使用第三次调用,如result = UCommand1(68, 1, 8811, )的第四个参数,需要传入char*型,在vb中如何实现?如何把类似c:\ID类的字符串地址传过去?