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

CanReceiveMessage

ドキュメント内 GPC-4851 (ページ 186-195)

第4章 リファレンス

7. CanReceiveMessage

●Visual C# .NET(x86、x64 共用)

[DllImport(“IFCan.dll”)]

public static extern uint CanReceiveMessage(

IntPtr DeviceHandle, out CAN_MESSAGE CanMessage, ref uint Count );

[DllImport(“IFCan.dll”)]

public static extern uint CanReceiveMessage(

IntPtr DeviceHandle, [Out] CAN_MESSAGE[] CanMessage, ref uint Count );

●Visual C# .NET(x86 専用)

[DllImport(“IFCan.dll”)]

public static extern uint CanReceiveMessage(

uint DeviceHandle, out CAN_MESSAGE CanMessage, ref uint Count );

[DllImport(“IFCan.dll”)]

public static extern uint CanReceiveMessage(

uint DeviceHandle, [Out] CAN_MESSAGE[] CanMessage, ref uint Count );

●Visual Basic .NET(x86、x64 共用)

Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _

ByRef CanMessage As CAN_MESSAGE, _ ByRef Count As Integer _

) As Integer

Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As IntPtr, _

<Out()> ByVal CanMessage() As CAN_MESSAGE, _ ByRef Count As Integer _

) As Integer

●Visual Basic .NET(x86 専用)

Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _

ByRef CanMessage As CAN_MESSAGE, _ ByRef Count As Integer _

) As Integer

Declare Function CanReceiveMessage Lib "IFCan.DLL"( _ ByVal DeviceHandle As Integer, _

<Out()> ByVal CanMessage() As CAN_MESSAGE, _ ByRef Count As Integer _

) As Integer

【パラメータ】

hDeviceHandle

CanOpenPort 関数で取得したデバイスハンドルを指定してください。

pCanMessage

受信メッセージを格納する構造体へのポインタを指定してください。

pCount で指定された個数分の領域を用意してください。

CAN_MESSAGE構造体の説明については、『4.3 構造体説明』をご参照ください。

pulCount

受信バッファから取り出すメッセージの件数を指定してください。

(1~CanSetConfig 関数で設定した受信バッファのサイズ(デフォルト:64))

受信バッファに蓄えられているメッセージが指定された件数よりも少ない場合、実際に 受信バッファから取り出された件数が、この変数に返されます。

例)PortStatus.ulRXBCount が 8 の時に、pulCount に 10 をセットし、CanReceiveMessage 関数を実行すると、pulCount に 8 が返され、正常終了します。

【戻り値】

正常終了した場合は、IFCAN_ERROR_SUCCESSが返されます。

IFCAN_ERROR_SUCCESS以外の値が返された場合については、『4.4 戻り値一覧』をご参照くださ い。

【使用例】

●C 言語 INT nRet;

CAN_MESSAGE CanMessage[10];

unsigned long ulCount;

HANDLE hDeviceHandle;

hDeviceHandle = CanOpenPort(“IFCAN1”);

: :

// 受信メッセージの取り出し ulCount = 10;

nRet = CanReceiveMessage(hDeviceHandle, CanMessage, &ulCount);

if (nRet != IFCAN_ERROR_SUCCESS) {

if (nRet == IFCAN_ERROR_BUFFER_IS_EMPTY) { printf(“受信メッセージがありません”);

}

} else {

for (i=0; i<ulCount; i++) {

printf(“受信メッセージ長 : %ld\n”,CanMessage[i].ulLength);

printf(“ID : %lx\n”,CanMessage[i].ulID);

printf(“受信データ : “);

for (j=0;i<CanMessage[i].ulLength;j++) { printf(“%02x “,CanMessage[i].bData[j]);

}

printf(“\n”);

} }

Dim lpszName As String Dim lpszMessage As String Dim hDeviceHandle As Long

Dim CanMessage(0 To 9) As CAN_MESSAGE Dim ulCount As Long

lpszName = "IFCAN1" & Chr( 0 )

hDeviceHandle = CanOpenPort(lpszName) :

ulCount = 10

‘ 受信メッセージの取り出し

nRet = CanReceiveMessage(hDeviceHandle, CanMessage(0), ulCount) If nRet <> IFCAN_ERROR_SUCCESS Then

If nRet = IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox(“受信メッセージがありません”) End If

Else

For i=0 To ulCount - 1

lpszMessage = lpszMessage & Str(i+1) & “件目のメッセージ” & vbCrLf & _

“受信メッセージ長 : “ & Str(CanMessage(i).ulLength) & vbCrLf & _

“ID : “ & Str(CanMessage(i).ulID) & vbCrLf & “受信データ : “ For j=0 To CanMessage(i).ulLength - 1

lpszMessage = lpszMessage & Hex(CanMessage(i).bData(j)) & “ “ Next

lpszMessage = lpszMessage & vbCrLf Next

MsgBox(lpszMessage) End If

var

lpszName: String;

lpszMessage: String;

hDeviceHandle: THandle;

CanMessage: array[0..9] of CAN_MESSAGE;

nRet: Integer;

ulCount: ULONG;

i: Integer;

j: Integer;

lpszName := ‘IFCAN1’;

hDeviceHandle := CanOpenPort(lpszName);

: :

ulCount := 10;

nRet := CanReceiveMessage(hDeviceHandle, CanMessage[0], ulCount);

if nRet <> IFCAN_ERROR_SUCCESS then begin

if nRet = IFCAN_ERROR_BUFFER_IS_EMPTY then begin

MessageDlg(‘受信メッセージがありません’, mtError, [mbOK], 0);

end else

for i := 0 To ulCount - 1 do begin

lpszMessage := IntToStr(ulCount) + ‘件目のメッセージ\n’;

lpszMessage := lpszMessage + ‘ 受 信 メ ッ セ ー ジ 長 : ‘ + IntToStr(CanMessage[i].ulLength) + ‘\n’;

lpszMessage := lpszMessage + ‘ID : ‘ + IntToStr(CanMessage[i].ulID) + ‘\n’;

lpszMessage := lpszMessage + ‘受信データ : ‘;

for j := 0 To CanMessage[i].ulLength - 1 do begin

lpszMessage := lpszMessage + IntToHex(CanMessage[i].bData[j], 2) + ‘ ‘;

end;

MessageDlg(lpszMessage, mtInformation, [mbOK], 0);

end;

end;

end;

●Visual C# .NET uint Ret;

IFCCAN_ANY.CAN_MESSAGE[] CanMessage = new IFCCAN_ANY.CAN_MESSAGE[10];

uint Count;

IntPtr DeviceHandle;

string Message = “”;

int i;

uint j;

for(i = 0; i < 10; i++) {

CanMessage[i].InitializeArray();

}

DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”);

// 受信メッセージの取り出し Count = 10;

Ret = IFCCAN_ANY.CanReceiveMessage(DeviceHandle, CanMessage, ref Count);

if(Ret != IFCCAN_ANY.IFCAN_ERROR_SUCCESS) {

if(Ret == IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY) {

MessageBox.Show(“受信メッセージがありません”);

} } else {

for(i = 0; i < ulCount; i++) {

Message = “受信メッセージ長 : ” + CanMessage[i].Length.ToString();

MessageBox.Show(Message);

Message = “ID : ” + CanMessage[i].ID.ToString();

MessageBox.Show(szMessage);

Message = “受信データ : “;

for(j = 0; j < CanMessage[i].Length; j++) {

Message += CanMessage[i].Data[j].ToString();

}

●Visual Basic .NET Dim Message As String Dim DeviceHandle As Integer

Dim CanMessage(9) As IFCCAN_ANY.CAN_MESSAGE Dim Count As Integer

Dim i As Integer Dim j As Integer Dim Ret As Integer for i = 0 To 9

CanMessage(i).InitializeArray() Next

DeviceHandle = IFCCAN_ANY.CanOpenPort(“IFCAN1”) :

Count = 10

‘ 受信メッセージの取り出し

Ret = IFCCAN_ANY.CanReceiveMessage(DeviceHandle, CanMessage, Count) If Ret <> IFCCAN_ANY.IFCAN_ERROR_SUCCESS Then

If Ret = IFCCAN_ANY.IFCAN_ERROR_BUFFER_IS_EMPTY Then MsgBox(“受信メッセージがありません”)

End If Else

For i = 0 To Count – 1

Message = Message & Str(i + 1) & “件目のメッセージ” & vbCrLf & _ “受信メッセージ長 : “ & Str(CanMessage(i).Length) & vbCrLf & _ “ID : “ & Str(CanMessage(i).ID) & vbCrLf & “受信データ : “ For j = 0 To CanMessage(i).Length

Message = Message & Hex(CanMessage(i).Data(j)) & “ “ Next

Message = Message & vbCrLf Next

MsgBox(Message) End If

●Visual C++ CLR プロジェクト unsigned int Ret;

array<IFCCAN_ANY::CAN_MESSAGE>^ CanMessage =

gcnew array<IFCCAN_ANY::CAN_MESSAGE>(10);

unsigned int Count;

IntPtr DeviceHandle;

String^ Message = “”;

unsigned int i;

unsigned int j;

for(i = 0; i < 10; i++) {

CanMessage[i].InitializeArray();

}

DeviceHandle = IFCCAN_ANY::CanOpenPort(“IFCAN1”);

// 受信メッセージの取り出し Count = 10;

Ret = IFCCAN_ANY::CanReceiveMessage(DeviceHandle, CanMessage, Count);

if(Ret != IFCCAN_ANY::IFCAN_ERROR_SUCCESS) {

if(Ret == IFCCAN_ANY::IFCAN_ERROR_BUFFER_IS_EMPTY) {

MessageBox::Show(“受信メッセージがありません”);

} } else {

for(i = 0; i < Count; i++) {

Message = “受信メッセージ長 : ” + CanMessage[i].Length.ToString();

MessageBox::Show(Message);

Message = “ID : ” + CanMessage[i].ID.ToString();

MessageBox::Show(Message);

Message = “受信データ : “;

for(j = 0; j < CanMessage[i].Length; j++) {

Message += CanMessage[i].Data[j].ToString();

ドキュメント内 GPC-4851 (ページ 186-195)