• 検索結果がありません。

GPIB ボード (GPC-4301 高機能版 DLL)

ドキュメント内 Microsoft Visual Studio .NET移行ガイド (ページ 35-44)

2.1  関数定義ファイルのインポート

2.1.5  GPIB ボード (GPC-4301 高機能版 DLL)

弊社GPIBボードソフトウェアライブラリGPC-4301高機能版DLL用の関数定義ファイ ルの変更点を示します。

Visual Basic .NETとVisual Basic 6.0の関数定義ファイルは以下のフォルダに納められ ています。

Visual Basic 6.0

ソフトウェア GPC-4301 関数定義ファイル名 GPC4304.bas

格納先フォルダ <インストール先>¥Interface¥GPC4301¥include¥GPC4304.bas Visual Basic .NET

ソフトウェア BPC-0818 関数定義ファイル名 GPC4301Ex.bas

格納先フォルダ <インストール先>¥Interface¥BPC0818¥GPC4301¥include¥GPC4301Ex.vb

Visual Basic 6.0用の関数定義ファイルと、Visual Basic .NET用の関数定義ファイル を比較します。

関数定義ファイルは、以下の定数と関数が変更になっています。

これらの定数、関数を使用される場合は注意してください。

2-8 関数定義ファイルの変更点 (GPC4301 高機能版DLL)

定数名 変更理由 詳細情報

GPIB_SUCCESS_NOT_FOU

ND_LISTENERなど データ型の指定が必要 なし

関数名 変更理由 詳細情報

PciGpibExMastSendData PciGpibExMastRecvData PciGpibExSlavSendData PciGpibExSlavRecvData

複数の送受信データ型に対応するた め、複数の関数定義を行います。

『固定長文字 列』

『文字エンコ ード』

『関数のオー バーロード』

PciGpibExSetSrqEvent Anyキーワードが使用できない 『 Declare ス

テートメント はAs Any 型 のパラメータ をサポートし ない』

また、次の定義を追加します。

項目 追加理由 詳細情報

delegate型 関数宣言の追加

(PLPSRQCALLBACK)

コールバック関数を使用するために delegate宣言を追加します。

PciGpibExSetSrqEvent関 数 が 要 求 す るパラメータの一つが使用する型で す。

『デリゲード オブジェクト を使用したコ ールバック処 理』

◆定数について

表2-8の変更理由「データ型の指定が必要」についての修正点を以下に示します。

List2-39,2-40にVisual Basic 6.0とVisual Basic .NETの

GPIB_SUCCESS_NOT_FOUND_LISTENER定数宣言部を示します。太字で記載した部分が変

更点です。

List 2-39 Visual Basic 6.0のGPIB_SUCCESS_NOT_FOUND_LISTENER定数 Public Const GPIB_SUCCESS_NOT_FOUND_LISTENER = 11

List 2-40 Visual Basic .NETのGPIB_SUCCESS_NOT_FOUND_LISTENER定数 Public Const GPIB_SUCCESS_NOT_FOUND_LISTENER As Integer = 11

Visual Basic 6.0で は 定 数 の 宣 言 時 に 型 を 必 要 と し ま せ ん で し た が 、Visual Basic .NETでは定数に対しても使用する型を明示的に宣言する必要があります。

その他の定数でも同様に修正されています。各関数定義ファイルを比較し、確認 してください。

次項目で説明している「Anyキーワードが使用できない」と言う変更にも言える ことですが、Visual Basic .NETでは全体的に曖昧さをなくして厳密な定義・宣言を 必要とするように変更されています。また、以前のバージョンでは可能であった、

変数宣言なしでいきなり変数を使用する処理もできなくなっています。

曖昧な変数定義等をなくす事で、バグを埋め込んでしまう可能性を排除すること が可能ですが、これまで変数定義に気を遣わずにコーディングしていた場合には 注意が必要になります。

◆PciGpibExMastSendData関数について

PciGpibExMastSendData関数は、複数の送信データ型に対応するため、複数の関数 定義を行います。

本書で取り上げる関数定義例は、受信データ格納先に次のデータ型を指定する場 合です。

バイト型、バイト配列型、IntPtr型、文字列型。

[関数定義]

パラメータの型が異なる4つの関数宣言を行います。

関数名は、すべて同じPciGpibExMastSendDataとします。

Visual Basic .NETは、同一の関数名で、引数の異なる複数の関数定義を行うことが できる、関数のオーバーロードをサポートしています。

関数のオーバーロードについての詳細情報は『関数のオーバーロード』を参考に してください。

パラメータの型が異なる関数は、それぞれ次のような異なる用途で使用できます。

表 2-9 PciGpibExMastSendData関数 パラメータ型別用途一覧

送信データ型 用途

Byte型 バイナリデータの受信(1データ)

Byte型配列 バイナリデータの受信(複数データ)

String型 文字列データの受信

IntPtr型 特殊なデータブロックの受信

非同期処理時

List 2-41 Visual Basic 6.0のPciGpibExMastSendData関数定義

Declare Function PciGpibExMastSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Long, ByRef npAdrsTbl As Long, ByVal dwLength As Long, ByVal pvBuffer As String, ByVal uMsg As Long) As Long

List 2-42 Visual Basic .NETのPciGpibExMastSendData関数定義(Byte型用)

Declare Function PciGpibExMastSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByVal dwLength As Integer, ByRef pvBuffer As Byte, ByVal uMsg As Integer) As Integer

List 2-43 Visual Basic .NETのPciGpibExMastSendData関数定義(Byte配列型用)

Declare Function PciGpibExMastSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByVal dwLength As Integer, ByVal pvBuffer() As Byte, ByVal uMsg As Integer) As Integer

List 2-44 Visual Basic .NETのPciGpibExMastSendData関数定義(String型用)

Declare Function PciGpibExMastSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByVal dwLength As Integer, ByVal pvBuffer As String, ByVal uMsg As Integer) As Integer

List 2-45 Visual Basic .NETのPciGpibExMastSendData関数定義(IntPtr型用)

Declare Function PciGpibExMastSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByVal dwLength As Integer, ByVal pvBuffer As IntPtr, ByVal uMsg As Integer) As Integer

◆PciGpibExMastRecvData関数について

PciGpibExMastRecvData関数は、複数の受信データ型に対応するため、複数の関数 定義を行います。

本書で取り上げる関数定義例は、受信データ格納先に次のデータ型を指定する場 合です。

バイト型、バイト配列型、IntPtr型、文字列型。

[関数定義]

パラメータの型が異なる4つの関数宣言を行います。

関数名は、すべて同じPciGpibExMastRecvDataとします。

Visual Basic .NETは、同一の関数名で、引数の異なる複数の関数定義を行うことが できる、関数のオーバーロードをサポートしています。

関数のオーバーロードについての詳細情報は『関数のオーバーロード』を参考に してください。

パラメータの型が異なる関数は、それぞれ次のような異なる用途で使用できます。

表 2-10 PciGpibExMastRecvData関数 パラメータ型別用途一覧

受信データ型 用途

Byte型 バイナリデータの受信(1データ)

Byte型配列 バイナリデータの受信(複数データ)

String型 文字列データの受信

IntPtr型 特殊なデータブロックの受信

非同期処理時

List 2-46 Visual Basic 6.0のPciGpibExMastRecvData関数定義

Declare Function PciGpibExMastRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Long, ByRef npAdrsTbl As Long, ByRef dwpLength As Long, ByVal pvBuffer As String, ByVal uMsg As Long) As Long

List 2-47 Visual Basic .NETのPciGpibExMastRecvData関数定義

(送信データByte型用)

Declare Function PciGpibExMastRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByRef dwpLength As Integer, ByRef pvBuffer As Byte, ByVal uMsg As Integer) As Integer

List 2-48 Visual Basic .NETPciGpibExMastRecvData関数定義(Byte配列型用)

List 2-49 Visual Basic .NETのPciGpibExMastRecvData関数定義(String型用)

Function PciGpibExMastRecvData(ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByRef dwpLength As Integer, ByRef pvBuffer As String, ByVal uMsg As Integer) As Integer Dim nLength As Integer

Dim nRet As Integer

Dim e As ASCIIEncoding = New ASCIIEncoding() Dim szData(dwpLength - 1) As Byte

pvBuffer = ""

nLength = dwpLength

nRet = PciGpibExMastRecvData(nBoardNo, npAdrsTbl, nLength, szData, uMsg) If (nRet = 0) Then

pvBuffer = e.GetString(szData, 0, nLength) dwpLength = pvBuffer.Length

End If

PciGpibExMastRecvData = nRet End Function

受信データをString型に格納するPciGpibExMastRecvData関数は、Byte配列型でデー タを受信し、String型に変換を行うFunctionとして定義します。

これは、PciGpibExMastRecvData関数が文字列データにNULL終端を付加しないた めByte配列からの変換を必要とするためです。

詳細は、『固定長文字列』『文字エンコード』をご参照ください。

List 2-50 Visual Basic .NETのPciGpibExMastRecvData関数定義(IntPtr型用)

Declare Function PciGpibExMastRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal npAdrsTbl() As Integer, ByRef dwpLength As Integer, ByVal pvBuffer As IntPtr, ByVal uMsg As Integer) As Integer

◆PciGpibExSlavSendData関数、PciGpibExSlavRecvData関数について PciGpibExSlavSendData関数、およびPciGpibExSlavRecvData関数も

「PciGpibExMastSendData」、「PciGpibExMastRecvData」と同様に複数のデータ型 に対応できるように定義します。

List 2-51 Visual Basic 6.0のPciGpibExSlavSendData関数定義

Declare Function PciGpibExSlavSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Long, ByVal dwLength As Long, ByVal pvBuffer As String, ByVal uMsg As Long) As Long

List 2-52 Visual Basic .NETのPciGpibExSlavSendData関数定義

(Byte型送信データ)

Declare Function PciGpibExSlavSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal dwLength As Integer, ByRef pvBuffer As Byte, ByVal uMsg As Integer) As Integer

List 2-53 Visual Basic .NETのPciGpibExSlavSendData関数定義

Byte配列型送信データ)

Declare Function PciGpibExSlavSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal dwLength As Integer, ByVal pvBuffer() As Byte, ByVal uMsg As Integer) As Integer

List 2-54 Visual Basic .NETのPciGpibExSlavSendData関数定義

String型送信データ)

Declare Function PciGpibExSlavSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal dwLength As Integer, ByVal pvBuffer As String, ByVal uMsg As Integer) As Integer

List 2-55 Visual Basic .NETのPciGpibExSlavSendData関数定義

IntPtr型送信データ)

Declare Function PciGpibExSlavSendData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByVal dwLength As Integer, ByVal pvBuffer As IntPtr, ByVal uMsg As Integer) As Integer

List 2-56 Visual Basic 6.0PciGpibExSlavRecvData関数定義

Declare Function PciGpibExSlavRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Long, ByRef dwpLength As Long, ByVal pvBuffer As String, ByVal uMsg As Long) As Long

List 2-57 Visual Basic .NETのPciGpibExSlavRecvData関数定義

(Byte型受信データ)

Declare Function PciGpibExSlavRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByRef dwpLength As Integer, ByRef pvBuffer As Byte, ByVal uMsg As Integer) As Integer

List 2-58 Visual Basic .NETのPciGpibExSlavRecvData関数定義

(Byte配列型受信データ)

Declare Function PciGpibExSlavRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByRef dwpLength As Integer, ByVal pvBuffer() As Byte, ByVal uMsg As Integer) As Integer

List 2-59 Visual Basic .NETのPciGpibExSlavRecvData関数定義

(String型受信データ)

Function PciGpibExSlavRecvData(ByVal nBoardNo As Integer, ByRef dwpLength As Integer, ByRef pvBuffer As String, ByVal uMsg As Integer) As Integer

Dim nLength As Integer Dim nRet As Integer

Dim e As ASCIIEncoding = New ASCIIEncoding() Dim szData(dwpLength - 1) As Byte

pvBuffer = ""

nLength = dwpLength

nRet = PciGpibExSlavRecvData(nBoardNo, nLength, szData, uMsg) If (nRet = 0) Then

pvBuffer = e.GetString(szData, 0, nLength) dwpLength = pvBuffer.Length

End If

PciGpibExSlavRecvData = nRet End Function

List 2-60 Visual Basic .NETのPciGpibExSlavRecvData関数定義

(IntPtr型受信データ)

Declare Function PciGpibExSlavRecvData Lib "GPC4304.DLL" (ByVal nBoardNo As Integer, ByRef dwpLength As Integer, ByVal pvBuffer As IntPtr, ByVal uMsg As Integer) As Integer

◆PciGpibExSetSrqEvent関数について

表2-8の変更理由「Anyキーワードが使用できない」についての修正点を以下に示 します。

List2-61,2-62にVisual Basic 6.0とVisual Basic .NETのPciGpibExSetSrqEvent関数定義 を示します。太字で記載した部分が変更点です。

List 2-61 Visual Basic 6.0PciGpibExSetSrqEvent関数定義

Declare Function PciGpibExSetSrqEvent Lib "GPC4304.DLL" (ByVal nBoardNo As Long, ByVal lpOnSrqProc As Long, ByVal dwUser As Long) As Long

List 2-62 Visual Basic .NETのPciGpibExSetSrqEvent関数定義

Declare Function PciGpibExSetSrqEvent Lib "GPC4304.DLL" (ByVal ulBoardNo As Integer, ByVal lpOnSrqProc As PLPSRQCALLBACK, ByVal dwUser As Integer) As Integer

上記の関数宣言を行うには、PLPSRQCALLBACKの宣言が必要です。

PciGpibExSetSrqEvent関数のパラメータlpOnSrqProcは、SRQ信号有効時に自動で呼 び出されるコールバック関数のアドレスを指定するパラメータです。

Visual Basic .NET上では、デリゲートと呼ばれる仕組みを使用し、関数のコールバ ック機能を使用することができます。

PLPSRQCALLBACKは、デリゲート型を使用し、コールバック処理に使用される 関数の型を定義します。

PLPSRQCALLBACKを次のように定義します。

List 2-63 Visual Basic .NETのデリゲート型PLPSRQCALLBACK定義

Public Delegate Sub PLPSRQCALLBACK(ByVal nBoardNo As Integer, ByVal dwUser As Integer)

次のように使用します。

PLPSRQCALLBACK型のオブジェクトを保存する変数をモジュール定義ファイ ル内などに宣言します。(クラスコード中に宣言する場合、関数コールバック機 能を使用している間に、生成したデリゲート型オブジェクトが、解放されないよ うに、オブジェクトのスコープに注意が必要です。)

List 2-64 Visual Basic .NET PLPSRQCALLBACK定義 Public osp As PLPSRQCALLBACK

List 2-65 Visual Basic .NET PLPSRQCALLBACKの初期化 osp = New PLPSRQCALLBACK(AddressOf lpOnSrqProc)

nRet = PciGpibExSetSrqEvent(nBoardNo, osp, &H55)

List 2-66 Visual Basic .NET lpOnSrqProc

Sub lpOnSrqProc(ByVal dwBoardNo As Integer, ByVal dwUser As Integer) ' SRQ割り込みイベント処理を行うコールバック関数です

' ここにイベントが発生した時の処理を書いてください

End Sub

「Anyキーワードが使用できない」についての詳細情報はDeclare ステートメント はAs Any 型のパラメータをサポートしない』を参考にしてください。

デリゲートについての詳細情報は『デリゲードオブジェクトを使用したコールバ ック処理』を参考にしてください。

ドキュメント内 Microsoft Visual Studio .NET移行ガイド (ページ 35-44)