編集(投稿者)すみません、行き詰ってます。前に質問した者ですが、現在、C#でGPIBインターフェイスで制御しようとしています。動作中より停止した際に発するSRQを取得しようとしています。その際にポーリングを行わなければならないのですが、やり方を読んでもよくわかりません。GpibSetSrqEvent......指定番号のボードからのSRQコールバックイベントを登録します。GpibWaitSrqEvent......指定番号のボードからのSRQコールバックイベントを待ちます。GpibKillSrqEvent......指定番号のボードからのSRQコールバックイベントの登録を解除します。インターフェイス社の物では、上記の順番で行われるようなのですが、最初のGpibSetSrqEventから詰まってしまっています。コールバック関数のアドレスを指定します。説明「コールバック関数」を参照ください。コールバック関数に渡す任意の32ビットデータを指定します。***********************************************まずここで疑問が...何を基準に任意のビットデータを指定すればよいのかわかりません。下記のように定義されます。イベントが発生したボード番号が格納されます。ユーザデータを指定します。この関数に戻り値はありません。***********************************************このようにコールバック関数でもユーザーデータが必要となります。最初にコールバック関数を宣言するのですが、C言語ではvoidで宣言されていて、C#ではどのように宣言したらいいのかわかりません。GPIBという特殊な環境ではありますが、何か手がかりになるようなことなんでも結構ですのでアドバイスいただけたらと思います。仕様など、なにかご不明な点がございましたら、わかる範囲で答えます。コントローラはシステム内のどのトーカがSRQを発したのかステータスバイトを送らせて調べる。発見したら必要な処理を施す。lpOnSrqEvent"が呼ばれるという感じではないでしょうか。(GpibSetSrqEventを登録するか否かで"CALLBACK"が呼ばれるかどうかが決まる)>まずここで疑問が...何を基準に任意のビットデータを指定すればよいのかわかりません。コールバック関数に渡したいデータがないのならばダミーデータでも入れといて使わなければ良いだけでしょう>最初にコールバック関数を宣言するのですが、C言語ではvoidで宣言されていて、C#ではどのように宣言したらいいのかわかりませんC#でもVOIDで良いでしょう。コントローラはシステム内のどのトーカがSRQを発したのかステータスバイトを送らせて調べる。発見したら必要な処理を施す。(多分SRQを発信したトーカをリセットするのかな?専用のAPIがあるんじゃないですか?)>(1)その流れは読んでみたのですがわかりませんでした。他に詳しく書いてあるかもしれませんが、また探して見つかり次第、載せます。情報が少なくて申し訳ありません。********************************************************ここで、サービス要求をしている機器を探す方法として、シリアル・ポーリングとパラレル・ポーリングがあります。シリアル・ポーリングは、コントローラがサービス要求元と思われる機器を1台ずつ順番に呼び出して、その時の機器の状態を示すステータス・バイトと呼ばれる1バイトの情報を送らせ、この内容を調べることで、サービス要求元とその要因を取得します。規格上、ポーリング機能とSR機能は別の機能なので、SR機能のない機器でもポーリングは可能です。すればコントローラは好きな時にステータス・バイトを読むことで、現在の機器の状態を知ることができ、それに応じた処理を行うことができます。>まずここで疑問が...何を基準に任意のビットデータを指定すればよいのかわかりません。コールバック関数に渡したいデータがないのならばダミーデータでも入れといて使わなければ良いだけでしょう>ダミーデータですか!何か仮に数値を入れてみればよいのですかね...ありがとうございます。コールバック関数には特に必要な数がないので、どうすればいいのか困っていました。調べていたら、コールバック関数からの一連の流れをC#で説明してくれている資料がありました。手際が悪くてすみません。dwUser);・Step2:コールバック関数の作成lpSrqProcというコールバック関数を宣言します。引数パラメータの数、型を、デリゲートPLPSRQCALLBACKと合わせます。・}・Step3:DLL関数呼び出しデリゲートPLPSRQCALLBACKのオブジェクト保存先を定義します。osp;関数lpOnSrqProcをコールバック関数として、PLPSRQCALLBACKデリゲートオブジェクトを生成します。デリゲートオブジェクトを、GpibSetSrqEvent関数の第2パラメータに指定して呼び出します。0x55);以上でコールバック関数の登録は完了です。通常デリゲートは宣言してあげた後に、メソッド(今回はlpOnSrqProcを使用?)を宣言してその間に作業を書くと思うのですが、作業に「ボード番号」と「ユーザーパラメータ」を設定すればいいんですかね。ここで疑問が...何を基準に任意のビットデータを指定すればよいのかわかりません。必要なければ使わなくて大丈夫です。「0」でも入れておけばOKです。このようにコールバック関数でもユーザーデータが必要となります。必要となるのではなく、上で設定した「0」が入ってきます。その際にポーリングを行わなければならないのですが、やり方を読んでもよくわかりません。自分でポーリングする必要はないです。GpibSetSrqEvent......指定番号のボードからのSRQコールバックイベントを登録します。GpibWaitSrqEvent......指定番号のボードからのSRQコールバックイベントを待ちます。GpibKillSrqEvent......指定番号のボードからのSRQコールバックイベントの登録を解除します。登録した関数に飛んできます。「ボード番号」と「ユーザーパラメータ」を設定すればいいんですかね。こんな作業をするのでしょうか...「ボード番号」:複数のボードを使用している時に1つの処理ルーチンで済ませるためです。「ユーザパラメータ」:ユーザへの拡張性を持たせてくれてるだけです。必要ないなら無視していいです。