vc中函数定义如下: 
int DES(int op, char *key, char *inblock, char *outblock, int len) 函数返回outblock
编写成了des.dll 我定义的函数如下: 
Public Declare Function DES Lib "des.dll" (ByVal op As long, ByVal key As String, ByVal inblock As String, Byval outblock As String, ByVal size As long) As longdim outblock as string
outblock=string(8,0)des 1,"12345678","12345678",outblock,8奇怪就奇怪在返回的outblock 不正确,而用pb调用该dll返回的值是正确的。我比较了一下,用pb返回的字串最后以为的asc为137 ,而我的为63.
??????

解决方案 »

  1.   

    DES.dll在VB中的声明没错。 函数返回outblock 的类型是否为Long型??
      

  2.   

    返回的是 char * ,不会跟编码有关吧?
      

  3.   

    那应该改过来。按理说:DLL不应该直接返回字符串,而应该在参数中通过缓冲区指指针取得。
    例如:得到windows目录的标准DLL,而返回值是判断函数调用成功否
    Private Declare Function GetWindowsDirectory Lib "kernel32.dll" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
      

  4.   

    现在问题是,dephi 和 pb 调用该dll,均能正常返回outblock,偏偏是vb调用的时候,返回的值不对,我想知道为什么?
      

  5.   

    见鬼了,不能修改自己的帖子。vc中函数定义如下: 
    int DES(int op, char *key, char *inblock, char *outblock, int len) 函数返回outblock 
    编写成了des.dll 我定义的函数如下: 
    Public Declare Function DES Lib "des.dll" (ByVal op As long, ByVal key As String, ByVal inblock As String, Byval outblock As String, ByVal size As long) As long dim outblock as string 
    outblock=string(8,0) des 1,"12345678","12345678",outblock,8 奇怪就奇怪在返回的outblock 不正确,而用pb调用该dll返回的值是正确的。我比较了一下,用pb返回的字串最后一位的asc为137 ,而我的为0. 
    ?????? 
      

  6.   

    问题解决了,确实如此,我把传入和传出都定义为byte 就可以解决了。
      

  7.   

    顺便问一问,我定义 dim b(0 to 31)as byte 是可以的,dim b(0 to 变量) as byte 这种方式好像不行哦。
      

  8.   

    不能是变量,必须是确定的常数表达式,如:15+16,。
    可考虑这样:
    Dim b() As Byte
    Dim n As Integern = 31ReDim b(0 To n)
    Debug.Print UBound(b)
      

  9.   

    顶顶楼上.可以在REDIM时使用变量.
      

  10.   

    vb里面的String是BSTR,不是char*