Visual C# 使用時の注意点

関数仕様

C#用のインターフェースとしてクラスライブラリを提供しています。
デバイスドライバの関数は、クラスライブラリのメソッドから呼び出されます。
クラスライブラリ中のメソッドは、 元の関数からプレフィクスを除いた形で定義されています。
元の関数からプレフィクスを除いた名称のメソッドを呼び出してください。

例)LoggerOpenApplication関数の場合

Ret = logger.OpenApplication();

※ユニバーサル Windows プラットフォーム (UWP) には対応しておりません

 

関数引数、戻り値

各関数の引数、戻り値の内容は開発言語に依存せず共通です。
詳細は関数リファレンスをご参照下さい。

 

コールバック関数使用時の注意点

Visual C# ではコールバック関数によるイベントの通知を行う場合、コールバック関数のメモリアドレスを固定するための処理を追加する必要があります。

これらの処理のために必要なコード例を、以下に示します。
詳細はサンプルプログラムを参照してください。

■グローバル変数として宣言します。

GCHandle     gCh;
PLOGGEREVENTCALLBACK  pdelegate_func;
IntPtr       pfunc;

■Loadメソッドの中で割り込み処理用デリゲートを初期化し、ガベージコレクションにより破棄されないように参照を追加。

pdelegate_func = new PLOGGEREVENTCALLBACK(CallBackProc);
gCh = GCHandle.Alloc(pdelegate_func);

■Closedメソッドの中でハンドルを開放します。

gCh.Free();

■関数の固定ポインタを取得します。

pfunc = Marshal.GetFunctionPointerForDelegate(pdelegate_func);

■LoggerSetNotifyEventでは取得した固定ポインタを指定します。

Ret = logger.SetNotifyEvent(Id, pfunc, (uint)CLoggerConst.LOGGER_PARAM_EVENT_DATANUM, null);

 

文字列変数をByte配列へ変換する

LoggerSetChannelSetting()関数の第5引き数ChannelNameはByte配列です。
このため、Visual Basic .NETの文字列変数を、そのままChannelNameとして利用することはできません。

文字列変数をByte配列へ変換するのために必要なコード例を、以下に示します。
詳細はサンプルプログラムを参照してください。

■Byte配列、および、Encodingクラスを宣言します。

byte[] ChannelName = new byte[256];
Encoding Enc;

Encodingクラスの詳細は、Microsoft社のWebサイトを参照ください。

System.Text.Encodingクラス:https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding

 

■コード ページ識別子"shift_jis"を指定し、文字列"Channel 0"をByte配列に変換します。

Enc = System.Text.Encoding.GetEncoding("shift_jis");
ChannelName = Enc.GetBytes("Channel 0");

GetEncodingメソッド、GetBytesメソッドの詳細は、Microsoft社のWebサイトを参照ください。

Encoding.GetEncodingメソッド:https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding.getencoding
Encoding.GetBytesメソッド:https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding.getbytes
コード ページ識別子:https://learn.microsoft.com/ja-jp/windows/win32/intl/code-page-identifiers

 

Byte配列を文字列変数へ変換する

LoggerGetChannelSetting()関数の第5引き数ChannelNameはByte配列です。
このため、ChannelName変数を、そのままVisual Basic .NETの文字列変数として利用することができません。

Byte配列を文字列変数ChNameへ変換するのために必要なコード例を、以下に示します。
詳細はサンプルプログラムを参照してください。

■文字列変数、および、エンコードクラスを宣言します。

string ChName;
Encoding Enc;

エンコードクラスの詳細は、Microsoft社のWebサイトを参照ください。

System.Text.Encodingクラス:https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding

 

■Byte配列ChannelNameの先頭から終端文字"\0"までを検索し、有効な文字数Lengthを取得します。

byte SearchByte = 0;
int Length;

Length = Array.IndexOf(ChannelName, SearchByte);

 

Arrayクラス、および、IndexOfメソッドの詳細は、Microsoft社のWebサイトを参照ください。

System.Arrayクラス:https://learn.microsoft.com/ja-jp/dotnet/api/system.array
Array.IndexOfメソッド:https://learn.microsoft.com/ja-jp/dotnet/api/system.array.indexof

 

■コード ページ識別子"shift_jis"を指定し、Byte配列ChannelNameを文字列変数ChNameへ変換します。

Enc = System.Text.Encoding.GetEncoding("shift_jis");

ChName = Enc.GetString(ChannelName, 0, Length);

GetEncodingメソッド、および、GetStringメソッドの詳細は、Microsoft社のWebサイトを参照ください。

Encoding.GetEncodingメソッド:https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding.getencoding
Encoding.GetStringメソッド:https://learn.microsoft.com/ja-jp/dotnet/api/system.text.encoding.getstring
コード ページ識別子:https://learn.microsoft.com/ja-jp/windows/win32/intl/code-page-identifiers