Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal aHwNd As Long, ByVal LPTSTR As Long, ByVal Lint As Long) As LongPublic Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim sSave As String * 255
Dim ret As Long
'sSave = Space(255)
ret = GetClassName(hwnd, sSave, 255)
sSave = Left$(sSave, ret)
If sSave = "ComboBox" Then Form1.List1.AddItem sSave
If InStr(sSave, "特殊") > 0 Then
EnumChildProc = 0
Else
EnumChildProc = 1
End If
End Function
ret = GetClassName(hwnd, sSave, 255)
提示类型不匹配

解决方案 »

  1.   

    你看:GetClassName 中第二个形参定义 LPTSTR As Long  ,所以:sSave 应为整型 。
      

  2.   

    差点把我骗了,应该这样声明API:
    第二个形参类型是String
    Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
      

  3.   

    汗,楼主的声明哪搞来的,怎么会是long
      

  4.   

    哈哈~~楼主是在考验广大的csdn网友
      

  5.   

    其实声明也没有错,只是楼主搭配错了而已。
    大家试试这个代码:
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As Long, ByVal nMaxCount As Long) As LongPrivate Sub Form_Load()
        Dim strClsName As String
        strClsName = Space$(255)
        Call GetClassName(hWnd, ByVal StrPtr(strClsName), 255)
        strClsName = StrConv(strClsName, vbUnicode)
        Debug.Print Left$(strClsName, InStr(strClsName, Chr$(0)) - 1)
    End Sub
    运行上面的程序,看打印出来的类名是不是VB窗体的类名~
      

  6.   

    一般API声明中带有“lp”的参数都是指针形参数,可以直接传值也可以传地址,只是楼主没搞清楚情况而已~