最近、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 で間違った宣言が常に機能するのはなぜですか?