我最近修复了 VB6 应用程序中的一个错误,但我不确定到底出了什么问题。
有问题的部分是错误的 API 声明CreateEvent
。这就是 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
- 为什么错误的声明总是在 IDE 中起作用?