DLL en C++ utilisé dans C#
Bonjour tout le monde !
Je dois programmer un logiciel pour lire sur un RFID Reader stronglink et j'ai vraiment pas grand chose pour comprendre comment ça marche : La doc avec la device est en chinois, et je n'ai pas d'exemple en C#. J'ai seulement un pdf avec les fonctions et un exemple en C++.
Je crois être très prêt du but, j'ai la variable dans lequel, je crois, pouvoir trouver le ID, mais dans la doc C++ c'est un type char et moi en C# je chercherais plutôt un type string.
Je vous donne la description de la function, mon code C# et l'exemple C++ :
SL500-User-Manual.pdf
6.5.3 INT WINAPI ISO15693_GET_SYSTEM_INFORMATION P.33
C++
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| void CDemoDlg::OnButtonInventory()
{
WORD icdev = 0x0000;
int status;
unsigned char pData[MAX_RF_BUFFER];
unsigned char len;
unsigned char type = 0x31;
if(!m_bConnectDevice){
MessageBox("Not connect device","Error",MB_OK|MB_ICONERROR);
return;
}
status = rf_init_type(icdev,type);
if(status){
MessageBox("rf_init_type failed","Error",MB_OK|MB_ICONERROR);
return;
}
m_edit_uid1.SetWindowText("");
m_edit_uid2.SetWindowText("");
m_edit_uid3.SetWindowText("");
m_edit_uid4.SetWindowText("");
status = ISO15693_Inventorys(icdev,pData,&len);
if(status){
MessageBox("ISO15693_Inventorys failed","Error",MB_OK|MB_ICONERROR);
return;
}
for(int i = 0 ;i < len /9;i++ ){
if(i == 0)
m_edit_uid1.SetWindowTextEx(&pData[9 * i + 1],8);
if(i == 1)
m_edit_uid2.SetWindowTextEx(&pData[9 * i + 1],8);
if(i == 2)
m_edit_uid3.SetWindowTextEx(&pData[9 * i + 1],8);
if(i == 3)
m_edit_uid4.SetWindowTextEx(&pData[9 * i + 1],8);
}
MessageBox("INVENTORY success","Success",MB_OK|MB_ICONASTERISK);
} |
C#
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace test_RFID_reader
{
public partial class Form1 : Form
{
[DllImport("MasterRD.dll")]
static extern int rf_init_com(int port, int baud);
[DllImport("MasterRD.dll")]
static extern int rf_ClosePort();
[DllImport("MasterRD.dll")]
static extern int rf_beep(short icdev, int msec);
[DllImport("MasterRD.dll")]
static extern int ISO15693_Inventorys(short icdev, out int pData, out int pLen);
[DllImport("MasterRD.dll")]
static extern int rf_get_device_number(out short icdev);
[DllImport("MasterRD.dll")]
static extern int ISO15693_Get_System_Information(short icdev, char model, out char pUID, out int pData, out int pLen);
private int _status;
private short _icdev = 0x0000;
private int _pData;
private int _pLen;
private char _pUID;
public Form1()
{
InitializeComponent();
test();
}
private void test()
{
_status = rf_init_com(3, 19200);
_status = rf_get_device_number(out _icdev);
//MessageBox.Show(_icdev.ToString());
//_status = rf_beep(_icdev, 1000);
_status = ISO15693_Inventorys(_icdev, out _pData, out _pLen);
//MessageBox.Show(_pData.ToString());
if (_status == 0)
{
ISO15693_Get_System_Information(_icdev, '1', out _pUID, out _pData, out _pLen);
MessageBox.Show(_pData.ToString()); // affiche : 990361856
}
//rf_ClosePort();
}
}
} |
Le ID de la puce test est E00401007C3B07B9
PS : Si un modérateur trouve un meilleur titre ne vous gêner pas à le changer.