Vb6 我的声明出了什么问题?
我最近修复了VB6应用程序中的一个错误,但我不确定到底出了什么问题 有问题的部分是Vb6 我的声明出了什么问题?,vb6,winapi,declare,Vb6,Winapi,Declare,我最近修复了VB6应用程序中的一个错误,但我不确定到底出了什么问题 有问题的部分是CreateEvent的错误API声明。这是API Viewer生成的: Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (lpEventAttributes As SECURITY_ATTRIBUTES, ...) As Long 下一个是错误的声明,显然有人不想导入安全属性结构 Declare Function CreateE
CreateEvent
的错误API声明。这是API Viewer生成的:
Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA"
(lpEventAttributes As SECURITY_ATTRIBUTES, ...) As Long
下一个是错误的声明,显然有人不想导入安全属性
结构
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
。。。它成功了
现在我有点困惑:
- 为什么在使用
SECURITY\u属性时参数
,而在使用ByRef
时参数必须是Any
ByVal
- 为什么错误的声明总是在IDE中工作
Event = CreateEvent(ByVal 0&, 0, 0, "MyEventName")
我不明白为什么在这里使用Nothing
,因为这是一个对象引用,调用需要一个指针。ByVal 0&
所做的是传递一个空指针——因为它是空的,所以它(不是)指向什么并不重要。但是通过Nothing ByVal
可能会强制ByVal 0&
,这就是它工作的原因
至于它在IDE中工作的原因,IDE确实倾向于更宽容地对待这样的事情。
ByVal。。。正如任何一个
都是参数声明中最奇怪的情况。