メインコンテンツまでスキップ

Microsoft .NET Frameworkでの注意点

開発環境に「Microsoft .NET Framework」(以下「.NET環境」)を使用する場合は、構造体や定数の定義などが異なります。 詳細については、以下のAPIリファレンスを参照してください。

APIリファレンス

.NET環境の対応バージョンは4.0以降です。

備考

同梱サンプルでは v4.6(C#サンプル)および v4.5.2(SDK GUIサンプル)での利用実績があります。

構造体定義

.NET環境では、構造体はvalue structで定義されます。各構造体は、メンバ変数の型がC++/CLI形式に変更されますが、メンバ変数名や構造体定義については変更されません。 ただし、一部の構造体では例外的な処理を行っています。

(1) StMPXAPIVersion構造体(APIのバージョン情報)のメンバ変数APIVersionは、以下のように文字列で定義されています。

StMPXAPIVersion

(2) StMPXDeviceInfo構造体(MicroPeckerXのデバイス情報)のメンバ変数Modelは、以下のように文字列で定義されています。

StMPXDeviceInfo

Visual Studioでの利用

C#またはVB.NETで本SDKを使用する場合は、Visual Studioのプロジェクトにて、以下のラッパDLLファイルを参照してください。

.NET環境ラッパDLLファイル
32bit版MPXCtrldotNET40Free.dll
64bit版MPXCtrldotNET40Free_x64.dll

32bit版での設定例

開発環境に「Microsoft Visual C++ 2019」を使用する場合の設定手順例を以下に示します。

  1. 「ソリューション エクスプローラー」の「参照」を右クリックします。
設定例1
  1. 表示されるコンテキストメニューから「参照の追加」を選択します。
設定例2
  1. 「参照マネージャー」ダイアログの「参照」ボタンをクリックし、表示されるファイルダイアログから「MPXCtrldotNET40Free.dll」を選択します。
設定例3
  1. 「参照マネージャー」ダイアログの参照ファイル一覧に「MPXCtrldotNET40Free.dll」が表示され、チェックボックスにチェックが入っていることを確認して「OK」ボタンをクリックします。
設定例4
  1. 「ソリューション エクスプローラー」の「参照」のリストに、「MPXCtrldotNET40Free.dll」が追加されたことを確認します。
設定例5
ヒント

DLL情報ファイル(ファイル名はラッパDLLファイル名から拡張子を「xml」に変更したものが該当します)をラッパDLLファイルと同じフォルダ内に格納しておくと、コード補完にてAPIの詳細が表示されます。

実行時に必要なDLL

ラッパDLLを参照するだけでは実行できません。実行時には、実行ファイルと同じフォルダにネイティブDLLも配置してください。

実行プロセスラッパDLLネイティブDLL
32bitMPXCtrldotNET40Free.dllMPXCtrlFree.dll
64bitMPXCtrldotNET40Free_x64.dllMPXCtrlFree_x64.dll

詳細な同梱物は 製品構成 を参照してください。

ビット数を必ず一致させる

  • 32bitプロセスに64bit DLLを読み込ませない
  • 64bitプロセスに32bit DLLを読み込ませない
  • AnyCPUを使う場合も、実行環境に合わせて参照DLL/配置DLLを統一する

一致していない場合、BadImageFormatException や DLLロード失敗が発生します。

C#での配列メンバー初期化

.NETラッパの構造体には、配列メンバーを持つものがあります。
new で配列だけ確保した後、各要素の配列メンバーも明示的に初期化してください。

// CAN Slot/Log の初期化例
var slots = new StMPXCANSlot[28];
for (int i = 0; i < slots.Length; i++)
{
slots[i].Increment = new byte[64];
slots[i].Frame.Data = new byte[64];
}

var canLogs = new StMPXCANLog[1024];
for (int i = 0; i < canLogs.Length; i++)
{
canLogs[i].Data = new byte[64];
}

// LIN Sim/Log の初期化例
var masterSims = new StMPXLINMasterSim[2];
for (int i = 0; i < masterSims.Length; i++)
{
masterSims[i].Item = new StMPXLINMasterSimItem[64];
}

StMPXLINSlaveSim slaveSim = new StMPXLINSlaveSim();
slaveSim.Item = new StMPXLINSlaveSimItem[64];

var linLogs = new StMPXLINLog[1024];
for (int i = 0; i < linLogs.Length; i++)
{
linLogs[i].Data = new byte[64];
}

未初期化のままアクセスすると、NullReferenceException の原因になります。