Win32 APIの定数:定義は?

2017-01-30 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-01-29)の記事「クライアント/サーバ:イベント学習」では、
  ・・・・・
  ・・・・・
  そこで、
  プログラムを2本作って、動作確認しようとしたが、
  “EVENT_ALL_ACCESS”の値が・・・・・分からない?
  ・・・・・
  ・・・・・
で終わっていた。


何処かに解説記事が無いのか?
「Windows API 定義」と検索してみたら、・・・
<紙>にとっては、非常に参考になるページを見つけた:
Windows API関数呼び出しの心得

このページは、
  Advanced HSP
  - Win32 API Programming for HSP3 -
の中にある。

それで、このページの中ほどに、
  Windows APIへの苦難の道
なる段落?があり、

その2番目?に、
  定数名はどう調べる?
   次に問題として挙げられるのが、
  定数名の値をどのようにして知るのかということです。
   Windows APIでは、いくつかの値が定数名という形で定義されています。
  例えば、以前にも出てきましたが、定数名「NULL」は0という値で
  定義されています。そのほか、最も簡単なところでは、定数名「FALSE」は0、
  「TRUE」は1という値を持った定数名として定義されています。
  HSPスクリプト中では、
  ・・・・・
  ・・・・・
なるくだりがある。

これを見ると、
  blueleafさんのページ『青い葉っぱ』
    http://hp.vector.co.jp/authors/VA034288/
とあったので、
行ってみた。

  WIN32API定数

があった。これは、
ページ内の const.lzh 書庫ファイルへのリンクですね。

早速ダウンロードさせて頂いた。


“EVENT_ALL_ACCESS”の値については、
18,473行目に
  #define EVENT_ALL_ACCESS  $001F0003
とあった。
C言語流では、0x001F0003 ですね。

と云うことで、この“定数定義ファイル”は必携です。


これを使って イベントテストプログラムを作ってみた。

先に起動する方
----- test_event_1.gsl
-- イベントオブジェクト作成
sh = ffi.C.CreateEventA( 0, 1, 0, charA('EVENT') )
-- イベントオブジェクトを取得
h = ffi.C.OpenEventA( 0x001F0003, 0, charA('EVENT') )

-- シグナル状態チェック
flg = ffi.C.WaitForSingleObject( h, 0 )
print( flg%256 ) ----- 0:シグナル状態、2:非~(初期状態)

_=io.read(1) -- 手動同期(他方の起動待ち)

-- シグナル状態にする。
ffi.C.SetEvent( h )
-- シグナル状態チェック
flg = ffi.C.WaitForSingleObject( h, 0 )
print( flg%256 )

_=io.read(1) -- 手動同期(他方の次段階待ち)

-- シグナル状態チェック
flg = ffi.C.WaitForSingleObject( h, 0 )
print( flg%256 )
と云うもの。

後から起動する方
----- test_event_2.gsl
-- イベントオブジェクトを取得
h = ffi.C.OpenEventA( 0x001F0003, 0, charA('EVENT') )

-- シグナル状態チェック
flg = ffi.C.WaitForSingleObject( h, 0 )
print( flg%256 ) ----- 0:シグナル状態、2:非~(初期状態)

_=io.read(1) -- 手動同期(他方の次段階待ち)

-- シグナル状態チェック
flg = ffi.C.WaitForSingleObject( h, 0 )
print( flg%256 )

_=io.read(1) -- 手動同期(他方の次段階待ち)

-- 非シグナル状態にする。
ffi.C.ResetEvent( h )
-- シグナル状態チェック
flg = ffi.C.WaitForSingleObject( h, 0 )
print( flg%256 )
と云うもの。

そして実行は、“test_event_1.gsl”、“test_event_2.gsl”の順に起動し、
それぞれの窓内で、交互に [Enter]キーを押して確かめる。


なお、“シグナル状態チェック”の、
flg = ffi.C.WaitForSingleObject( h, 0 )
では、flg は、0258 だった。


最後に、
上記に対するプロトタイプ宣言?と、charA()関数の定義は、・・・
charA = |s|  ffi.cast( 'char*', s )
ffi.cdef[[
int CreateEventA(
int lpEventAttributes, // セキュリティ記述子
int bManualReset, // リセットのタイプ
int bInitialState, // 初期状態
char* lpName // イベントオブジェクトの名前
);

int OpenEventA(
int dwDesiredAccess, // アクセス権
int bInheritHandle, // 継承オプション
char* lpName // イベントオブジェクトの名前
);

int SetEvent( int hEvent );
int ResetEvent( int hEvent );

int WaitForSingleObject(
int hHandle, // オブジェクトのハンドル
int dwMilliseconds // タイムアウト時間:ミリ秒(ms)単位
);
]]
でしょうか?


テスト(=学習) はOK。


本日はここまで。


“クライアント/サーバ”学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170109
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク