VC++ 生成了个DLL   sha.dll
函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32])
如果我想使用VB调用这个函数 改怎么声明呢,在线等待

解决方案 »

  1.   

    Dim M(0 To 31) As Byte
    Dim p(0 To 31) As Byte
    Delclare Procedure Meid_To_pESN Lib "sha.dll" (Meid() As Byte,pESN() As Byte)Call Meid_To_pESN(M,p)
      

  2.   

    Dim M(0 To 31) As Byte
    Dim p(0 To 31) As Byte
    Declare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)Call Meid_To_pESN(M, p)
      

  3.   

    呵呵,不好意思。一时昏了头,拼错了一个单词,又和DELPHI搞混了。
      

  4.   

    楼上的兄台,看来你还是吧VB VC弄的有点混淆了
    VB中M,p不能代表一个数组吧?
      

  5.   

    提示错误
    compile error:
    type mismath: array or user-defined type expected
      

  6.   

    public M(0 To 31) As Byte
    public p(0 To 31) As Byte
    Declare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)Call Meid_To_pESN(M, p) 
      

  7.   

    生成EXE以后运行就没有错误了,但是不能得到正确的值啊
    BYTE型数组传递成字符串 好像 就不是一对一的传递了,而是两个BYTE对应一个字符,要通过ASCILL码换算
      

  8.   

    关键看你的C程序对数组是怎么处理的,是当作数组呢,还是字符窜,还是unicode字符串。不同的方式vb中的声明也不同。
      

  9.   

    比如,如果C中是ANSI string则VB中要定义为string类型,并且以byval方式传递:
    Dim M As String
    Dim p As String
    Declare Sub Meid_To_pESN Lib "sha.dll" (ByVal Meid As String, ByVal pESN As String)Call Meid_To_pESN(M, p) 
      

  10.   

    上面的方法我试过了 可以得到正确的结果,但是请问 PESN为什么要以BYVAL方式传递呢
    如果以BYREF传递就会报错,
    而且我想多问一句,调用C的DLL时,为什么不生成EXE,调试的时候运行会报BAD DLL....的错误呢
    3Q
      

  11.   

    因为vb的string类型本身实质上就是一个指针,指向字符串的首地址。
    程序运行是加载dll时,如果没有指明绝对路径,首先会在当前目录中寻找,然后到windows,system32等目录中查找,再到path环境变量所示的目录中寻找。如果把dll放在工程目录中,exe文件当然一下就找到dll了,如果在vb中运行程序,则当前目录是vb所在的目录,当然找不到dll了。
      

  12.   

    但是VB中 是可以BYREF传递STRING型变量的啊
    我用VB做过这样的DLL,设置一个BYREF型的STRING变量,用来返回函数结果描述
      

  13.   

    那么C函数中的参数应该定义成BSTR*类型的才行。这里的状况比较多哦,一言难尽。