2016-02-28 281 views
1

我已反编译旧的Visual Basic 6项目,并使用安装在Windows XP虚拟机上的Visual Basic 6打开它。Visual Basic 6 - 编译错误:用户定义类型未定义

当我试图重新编译代码我得到的错误“编译错误:没有定义的用户定义类型”为这行代码 -

Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long 

据我所知,他的功能是USER32 Windows的一部分图书馆。

我试图添加user32.dll作为组件/参考,没有运气。

回答

4

添加user32.dll作为组件/参考将不是工作。您必须明确声明您要使用的所有Win32 API类型和函数。 VB 6包含了API Viewer,它可以帮助你解决这个问题,尽管它非常过时。

据推测,这不是此处定义的用户定义类型是RECT。它是由Win32头文件定义的结构,但除非您自己声明,否则VB不会知道它。

Public Type RECT 
    Left As Long 
    Top As Long 
    Right As Long 
    Bottom As Long 
End Type 

也可以更改的lpRect数据类型到As Any为了允许一个空指针传递(例如ByRef 0)。这会使控件的整个区域无效。

Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, _ 
                 ByRef lpRect As Any, _ 
                 ByVal bErase As Long) As Long