第 5 章 リファレンス 24
5.3 イベントについて
【使用例】
『5.6 使用例一覧』をご参照ください。
© 2011 Interface Corporation
56
17.IfHnlKillEvent
【機能】
イベント処理を解放します。
【書式】
●C 言語
DWORD IfHnlKillEvent ( HANDLE DeviceHandle );
●Visual Basic
Declare Function IfHnlKillEvent Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long _
)As Long
●Visual Basic .NET
Declare Function IfHnlKillEvent Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr _
)As Long
●Visual C#
[DllImport("IFHNL.DLL")]
public static extern uint IfHnlKillEvent ( IntPtr DeviceHandle
);
【パラメータ】
DeviceHandle
IfHnlOpen関数で取得したデバイスハンドルを指定してください。
【戻り値】
正常終了した場合は、IFHNL_ERROR_SUCCESSが返されます。
IFHNL_ERROR_SUCCESS以外の値が返された場合については、『5.5 戻り値一覧』をご参照くださ い。
【使用例】
『5.6 使用例一覧』をご参照ください。
© 2011 Interface Corporation
18.IfHnlFinishMessage
【機能】
メッセージ使用時の終了処理を行います。
GetMessage 関数、PeekMessage 関数などでメッセージ情報を取得した後、処理が完了したこと をこの関数で知らせてください。この関数を実行しない限り、正常にメッセージ情報が開放さ れません。
【書式】
●C 言語
DWORD IfHnlFinishMessage (
HANDLE DeviceHandle, PVOID wParam
);
●Visual Basic
Declare Function IfHnlFinishMessage Lib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _
ByVal wParam As Long _ )As Long
●Visual Basic .NET
Declare Function IfHnlFinishMessage Lib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _
ByVal wParam As IntPtr _ )As Long
●Visual C#
[DllImport("IFHNL.DLL")]
public static extern uint IfHnlFinishMessage ( IntPtr DeviceHandle,
IntPtr wParam );
【パラメータ】
DeviceHandle
IfHnlOpen関数で取得したデバイスハンドルを指定してください。
wParam
GetMessage 関数などで取得したノード名が格納されているメッセージ情報を入力してくだ さい。
【戻り値】
正常終了した場合は、IFHNL_ERROR_SUCCESSが返されます。
IFHNL_ERROR_SUCCESS以外の値が返された場合については、『5.5 戻り値一覧』をご参照くださ い。
© 2011 Interface Corporation
58
【備考】
GetMessage 関数、PeekMessage 関数、MSG 構造体、Message 構造体などメッセージの使用方法に ついては MSDN ライブラリを参照してください。
【使用例】
『5.6 使用例一覧』をご参照ください。
© 2011 Interface Corporation
19.IfHnlGetLinkStatus
【機能】
光メモリンクのリンク状態を取得します。
※デバイスハンドルがスレーブの場合、光拡張ハブのリンク状態は取得することができません。
※自身のデバイスのリンク状態は下記製品でのみ取得することができます。
・インタフェースモジュール製品(PCI-882611, PEX-882611, CPZ-882611) ・Classembly Devices®(マスタ、スレーブデバイス切り替え可能製品のみ) ●C 言語
unsigned long IfHnlGetLinkStatus(
HANDLE DeviceHandle, // デバイスハンドル
PIFHNL_LINK_STATUS pLinkStatus // ステータス構造体 );
●Visual Basic
Declare Function IfHnlGetLinkStatusLib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _
ByRef pLinkStatus As IFHNL_LINK_STATUS _ )As Long
●Visual Basic .NET
Declare Function IfHnlGetLinkStatusLib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _
ByRef pLinkStatus As IFHNL_LINK_STATUS _ )As Long
●Visual C#
[DllImport("IFHNL.DLL")]
public static extern uint IfHnlGetLinkStatus(
IntPtr DeviceHandle, ref IFHNL_LINK_STATUS pLinkStatus );
【パラメータ】
DeviceHandle
IfHnlOpen関数で取得したデバイスハンドルを指定してください。
pLinkStatus
リンク状態を格納する『IFHNL_LINK_STATUS構造体』への参照渡しを指定してください。
【戻り値】
正常終了した場合は、IFHNL_ERROR_SUCCESSが返されます。
IFHNL_ERROR_SUCCESS以外の値が返された場合については、『5.5 戻り値一覧』をご参照くださ い。
© 2011 Interface Corporation
60
20.IfHnlResponseCheck
接続先の光メモリンクデバイスの応答を確認します。
●C 言語
unsigned long IfHnlResponseCheck(
HANDLE DeviceHandle, // デバイスハンドル
CHAR * NodeName, // ノード名
HANDLE EventHandle, // イベントオブジェクト
DWORD TimeOutValue // タイムアウト時間
);
●Visual Basic
Declare Function IfHnlResponseCheckLib "IFHNL.DLL"( _ ByVal DeviceHandle As Long, _
ByVal NodeName As String, _ ByVal EventHandle As Long, _ ByVal TimeOutValue As Long _ )As Long
●Visual Basic .NET
Declare Function IfHnlResponseCheckLib "IFHNL.DLL"( _ ByVal DeviceHandle As IntPtr, _
ByVal NodeName As String, _ ByRef EventHandle As IntPtr, _ ByVal TimeOutValue As Integer _ )As Long
●Visual C#
[DllImport("IFHNL.DLL")]
public static extern uint IfHnlResponseCheck(
IntPtr DeviceHandle, String NodeName, IntPtr EventHandl,e
uint TimeOutValue
);
【パラメータ】
DeviceHandle
IfHnlOpen関数で取得したデバイスハンドルを指定してください。
NodeName
応答を確認するノード名を指定してください。
※マスタのデバイスハンドルから実行した場合のみ有効な引数です。
※スレーブのデバイスハンドルから実行する場合、自身のノード名を指定してください。
自身のノードのマスタの応答を確認します。
© 2011 Interface Corporation EventHandle
非同期実行を行う場合、作業が完了またはタイムアウトしたときにシグナル状態に設定さ れるイベントオブジェクトのハンドルを指定します。同期実行を行う場合、NULL または 0 を指定します。
TimeOutValut
同期実行を行う場合、タイムアウトとして処理が戻るまでの時間[ms]を指定します。
応答待ちの状態で指定した時間が経過すると IFHNL_ERROR_TIMEOUT が返されます。
※同期実行を行う場合のみ有効な引数です。非同期実行を行う場合には 0 を指定します。
※精度はご使用の環境のシステムクロックに依存します。精密な時間測定などには使用でき ません。ご注意下さい。
【戻り値】
正常終了した場合は、IFHNL_ERROR_SUCCESSが返されます。
IFHNL_ERROR_SUCCESS以外の値が返された場合については、『5.5 戻り値一覧』をご参照くださ い。
【備考】
別 プ ロ セ ス 、 ま た は 非 同 期 実 行 に て 応 答 の 確 認 中 に 本 関 数 を 実 行 し た 場 合 、 IFHNL_ERROR_RESPONSE_CHECK_NOW が返ります。
© 2011 Interface Corporation
62
5.3 イベントについて
5.3.1 コールバック関数
IfHnlSetEvent関数にて登録し、割り込みイベントが発生した時にコールされるコールバックルー チンです。
※Visual Basic 6.0 ではコールバック関数が使用できません。メッセージ機能を使用してくださ い。
【書式】
コールバックルーチンを使用する場合、下記のように記述します。
(下記はコールバックルーチンを EventProc とする場合の例です。)
●C 言語
void CALLBACK EventProc(HANDLE DeviceHandle, PVOID UserData, CHAR * NodeName) {
// 割り込みイベントに対応する処理を記述します }
コールバックルーチンの関数型 PIFHNLCALLBACK は下記のように定義されます。
#define IFHNLCALLBACK CALLBACK
typedef void (IFHNLCALLBACK *PIFHNLCALLBACK)(DWORD DeviceHandle, PVOID UserData, CHAR * NodeName);
●Visual Basic .NET
Public Sub EventProc(ByVal DeviceHandle As IntPtr, ByVal UserData As IntPtr, ByVal NodeName As String)
‘ 割り込みイベントに対応する処理を記述します End Function
コールバックルーチンの関数型 PIFHNLCALLBACK は下記のように定義されます。
Delegate Sub PIFHNLCALLBACK (ByVal DeviceHandle As IntPtr, ByVal UserData As IntPtr, _
ByVal NodeName As String)
●Visual C#
private void EventProc(IntPtr DeviceHandle, IntPtr UserData,string NodeName) {
// 割り込みイベントに対応する処理を記述します }
コールバックルーチンの関数型 PIFHNLCALLBACK は下記のように定義されます。
public delegate void PIFHNLCALLBACK(IntPtr DeviceHandle, IntPtr UserData, string NodeName);
© 2011 Interface Corporation DeviceHandle
デバイスハンドルが格納されます。
UserData
ユーザデータが格納されます。
NodeName
割り込み要求先のノード名が格納されます。(最大 16 文字)
【戻り値】
コールバックルーチンに戻り値はありません。
【備考】
エラーの場合、NodeNameにNULLが入り、UserDataにエラー情報が入ります。
エラー内容は『5.5 戻り値一覧』をご参照ください。
【使用例】
『5.6 使用例一覧』をご参照ください。
© 2011 Interface Corporation
64 5.3.2 メッセージ機能
割り込みイベントが発生した時に IfHnlSetEvent関数にて登録したウィンドウハンドル(Wnd)のウ ィンドウに関連付けられているメッセージキューに、メッセージをポストします。
メッセージを PeekMessage 関数などで取得する必要があります。
【書式】
PeekMessage 関数を使用する場合、下記のように記述します。
●Visual Basic
Const WM_IFHNL = &H400 + 1000 Private Sub Command1_Click() Dim message As MSG Dim i As Long …
i = 0 Do
Ret = PeekMessage(message, Me.hwnd, WM_IFHNL, WM_IFHNL, 1) If Ret <> 0 Then
Exit Do End If i = i + 1 If i = 100 Then …
‘ 終了処理 Exit Sub End If Sleep (100) Loop While Ret = 0
'It confirms interrupt request ahead.
CopyMemory EvNodeName(0), ByVal message.wParam, 16
Ret = IfHnlFinishMessage(DeviceHandle, message.wParam) …
End Sub
© 2011 Interface Corporation
【MSG 構造体のパラメータ】
hwnd
メッセージ送出ウィンドウハンドルが格納されます。
message
IfHnlSetEvent関数にて登録した割り込みメッセージ(InterruptMsg)が格納されます。
wParam
割り込み要求先のノード名が格納されます。(最大 16 文字) lParam
IfHnlSetEvent関数にて登録した任意のデータ(UserData)が格納されます。
【戻り値】
メッセージ処理の結果を返してください。
【備考】
エラーの場合、wParamに 0 が入り、lParamにエラー情報が入ります。
エラー内容は『5.5 戻り値一覧』をご参照ください。
エラーではない場合、データの抜き取りが完了したら、IfHnlFinishMessage関数を呼び出してメ ッセージの終了処理を行ってください。
【使用例】
『5.6 使用例一覧』をご参照ください。
© 2011 Interface Corporation
66