Visual C# 使用時の注意点

関数仕様

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

例)CntInit関数の場合

Ret = cnt.Init();

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

関数引数、戻り値

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

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

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

ここでは、これらの処理のために必要なコード例として、カウント一致イベント処理の場合を例として示します。
詳細はサンプルプログラムを参照してください。

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

GCHandle gCh;
PCOUNTUPCALLBACK pdelegate_func;
IntPtr pfunc;

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

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

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

gCh.Free();

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

pfunc = Marshal.GetFunctionPointerForDelegate(pdelegate_func);

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

Ret = cnt.CountUpCallbackProc(Id, pfunc, Temp);


CntSamplingSetBuffer()使用時の注意点

Visual C#.NETではバスマスタ転送で使用するバッファに対して メモリアドレスを固定するための処理を追加する必要があります。
これらの処理のために必要なコード例を示します。
詳細はサンプルプログラムを参照してください。

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

const int         DATA_NUM = 1000;                                 // バスマスタ用バッファサイズ
public const int  CHANNEL_NUM = 4;
uint[,]           SamplingData = new uint[DATA_NUM, CHANNEL_NUM];  // バスマスタ用バッファ
GCHandle          gCh;
IntPtr            pSamplingData;

■Loadメソッドの中でバッファにPinned型のハンドルを割り当てます。

if (gCh.IsAllocated == false)
{
   gCh = GCHandle.Alloc(SamplingData, GCHandleType.Pinned);
}

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

if (gCh.IsAllocated == true)
{
   gCh.Free();
}

■オブジェクトの固定ポインタを取得します。

pSamplingData = gCh.AddrOfPinnedObject();

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

ret = cnt.SamplingSetBuffer(Id, pSamplingData, CHANNEL_NUM, DATA_NUM, (short)CcntConst.CNTS_WRITE_ONCE);