我已经反编译了一个旧的Visual Basic 6项目,并使用安装在Windows XP虚拟机上的Visual Basic 6打开它。
当我尝试重新编译代码时,我得到了这行代码的错误“编译错误:用户定义的类型未定义” -
Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
据我所知,他的功能是User32 Windows Library的一部分。
我试图添加user32.dll作为组件/参考,没有运气。
答案 0 :(得分:4)
添加user32.dll作为组件/参考将不工作。您必须显式声明要使用的所有Win32 API类型和函数。 VB 6包含了API查看器,可以帮助您解决这个问题,尽管它已经过时了。
据推测,此处未定义的用户定义类型为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