本人一直在线!错误提示为 --->[
 编译错误:
 在该对像模块派生的对像模块中成员已存在。
]Private Declare Function Getdefurl Lib "uskydll.dll" (ByVal user_id As String, ByVal password As String, ByVal software As String, ByVal ver As String, ByVal group_id As String, ByVal Creditkey As String, ByRef userdata As String, ByRef errmsg As String) As IntegerPrivate Declare Function GenCR Lib "encrypt.dll" (ByVal user_id As String, ByVal password As String, ByVal software As String, ByVal ver As String, ByVal group_id As String) As StringPrivate Sub Close_Click()   Me.Caption = "Test Service:Command -> Close"
   
End SubPrivate Sub TestSvc_Click()
    Dim s1, s2, s3, s4, s5, s6, s7, s8 As String
    Dim retval As Integer
    
    Me.Text6.Text = GenCR(s1, s2, s3, s4, s5)
    
    s1 = Me.Text1.Text
    s2 = Me.Text2.Text
    s3 = Me.Text3.Text
    s4 = Me.Text4.Text
    s5 = Me.Text5.Text
    s6 = Me.Text6.Text
    
    retval = Getdefurl(s1, s2, s3, s4, s5, s6, s7, s8)
    
    Me.Label1.Caption = s7
    Me.Label2.Caption = s8End Sub

解决方案 »

  1.   

    哎!又是头痛的String传递。
    这要看你那边的函数原型是什么了?一般外部String总是Byval传递的。
    ByRef userdata As String, ByRef errmsg As String这两个,如此声明,估计是想要指针?声明成Byval userdata As Long, Byval errmsg As Long,试试,传递时用StrPtr(s)传给你的函数,这样传的是Unicode串。
      

  2.   

    提示有错误的是这句:
    Private Declare Function GenCR Lib "encrypt.dll" (ByVal user_id As String, ByVal password As String, ByVal software As String, ByVal ver As String, ByVal group_id As String) As String编译错误:
    在该对像模块派生的对像模块中成员已存在。
      

  3.   

    平台是Delphifunction Getdefurl(user_id:string;password:string; p_name:string; p_group:string;p_date:string;p_key:string;var userdata:string;var errmsg:string):integer;stdcall;
      

  4.   

    Sorry,刚才没细看原问题,从提示看,像是个简单的重名问题。但我不明白,你调试通过了吗?调试不能用,怎么就编译?Dim s1, s2, s3, s4, s5, s6, s7, s8 As String
    这样声明的结果,只有s8是String,其余都是Variant
    所以Byref传递时,应该会有类型不匹配错误。另外,你搜索一下工程,看看GenCR是不是有重名了。
      

  5.   

    提示有错的是 GenCR,你怎么给 Getdefurl 的原型?除了小吉指出的错误之外,凡是需要函数返回(Out)值的字符串变量,或者用定长字符串:
    Dim s7 As String * 1024  '大小必须足够
    Dim s8 As String * 256或者使用前赋值,使之实例化:
    Dim s7 As String
    Dim s8 As String......
    s7 = String(1024,Chr(0))
    s8 = Space(256)
    ......否则将发生系统异常的错误。
      

  6.   

    如果函数中不是指针的指针,字符串还应该声明为 Byval。因为 VB 中的字符串,实际上是一个长整形指针,指向一个缓冲区。当实例化时,会给指针赋值,并开辟缓冲区。如果你用 Byte 数组类型,则需要声明为 Byref。当你的密文包含不可打印字符时,有必要按 Byte 数组来声明和调用,否则中文系统会将不能解释的数值统统弄成 Null(显示为 ?)。
      

  7.   

    function GenCR(user_id:string;password:string; software:string=''; ver:string='';group_id:string=''):string;stdcall;
      

  8.   

    如果是重名问题试试
    Private Declare Function GenCR1 Lib "encrypt.dll" Alias "GenCR"(...