我最近修复了VB6应用程序中的一个错误,但我不确定到底出了什么问题。
令人讨厌的部分是CreateEvent
的API声明错误。这就是API Viewer生成的内容:
Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA"
(lpEventAttributes As SECURITY_ATTRIBUTES, ...) As Long
下一个是错误声明,显然有人不想导入SECURITY_ATTRIBUTES
结构...
Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA"
(lpEventAttributes As Any, ...) As Long
电话是:
Event = CreateEvent(Nothing, 0, 0, "MyEventName")
此调用在IDE中一直有效,但在编译后的.exe中却从未有效。 (CreateEvent
总是返回0)我将声明更改为:Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA"
(ByVal lpEventAttributes As Any, ...) As Long
...并且有效。
现在我有点困惑:
为什么使用ByRef
时参数SECURITY_ATTRIBUTES
为什么要使用ByVal
时必须为Any
?
Event = CreateEvent(ByVal 0&, 0, 0, "MyEventName")