dポイントプレゼントキャンペーン実施中!

CreateEventについて
下記ソースでCreateEventを実行すると例外発生してしまいます。

Structure SECURITY_ATTRIBUTES
Dim nLength As Long
Dim lpSecurityDescriptor As Long
Dim bInheritHandle As Long
End Structure

Dim stSecurityAttributes As SECURITY_ATTRIBUTES
stSecurityAttributes.nLength = Len(stSecurityAttributes)
stSecurityAttributes.bInheritHandle = 0
stSecurityAttributes.lpSecurityDescriptor = 0

Dim h As Long

 h = CreateEvent(stSecurityAttributes, True, False, "ABC")

例外内容は、保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
と出ているのですが、PCに問題ありでしょうか?ソースが間違っているのでしょうか?

環境は、vb.netです。

A 回答 (2件)

CreateEvent の Declare があやしい気がします。



Private Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (ByRef lpEventAttributes As SECURITY_ATTRIBUTES, ByVal ManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long

でやってみましたら、正常に実行できましたよ。

この回答への補足

確かに、上記のソースだとうまくいきました。
私はCreateEventの第一引数をByValで宣言していましたが、ネットで調べてもどれもByValだったと思います。でも正解はByRefなんですかね。。
次にOpenEventでもうまくいかないのですが、それも宣言でしょうか。

OpenEvent(ByVal, ByVal, ByVal)
WaitForSingleObject(ByVal, ByVal)
SetEvent(ByVal)

上記の引数の宣言をしていますが間違っていますでしょうか。
お時間があればよろしくお願いいたします。

補足日時:2010/04/01 17:10
    • good
    • 1

>私はCreateEventの第一引数をByValで宣言していましたが、ネットで調べてもどれもByValだったと思います。



そうですかね?
↓の As SECURITY_ATTRIBUTES では BtVal も ByRef もなし(ByRefと同じ) になっていますね。
http://www.winapi-database.com/File/File/CreateF …

>次にOpenEventでもうまくいかないのですが、それも宣言でしょうか。

OpenEvent の引数には構造体はないので、全て ByVal で問題ないのではないかと思いますが・・・。
CreateEvent と同様、例外が発生するのでしょうか?
それとも、例外は発生しないが、戻り値が NULL になるのでしょうか?
    • good
    • 0
この回答へのお礼

戻り値がNULLでした。
宣言かなとよくよく見直すと、VB.netはintegerなんですねlongを使用していました。
integerで無事動作することができました。
とてもありがとうございます。

お礼日時:2010/04/01 23:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!