Appearance
连接示例
点击按钮时连接控制器,注册消息回调接收推送。
cs
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void RecvMsgCallbackDelegate(int cmd, IntPtr message);
private RecvMsgCallbackDelegate recvMsgbackDelegate;
private SWIGTYPE_p_f_int_p_q_const__char__void recvMsgCallback;
public void RecvMsgCallback(int messageType, IntPtr messagePtr)
{
int length = 0;
while (Marshal.ReadByte(messagePtr, length) != 0) ++length;
byte[] buffer = new byte[length];
Marshal.Copy(messagePtr, buffer, 0, length);
string message = Encoding.UTF8.GetString(buffer);
string messageTypeHex = messageType.ToString("X");
string currentTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff");
Debug.WriteLine($"{currentTime} {messageTypeHex} : {message}\n\n");
AppendText($"{currentTime} {messageTypeHex} : {message}\n\n");
}
private void button1_Click(object sender, EventArgs e)
{
AppendText("Connecting...");
int temp = nrc_interface.connect_robot("192.168.1.13", "6001");
if (temp > 0)
{
fd = temp;
recvMsgbackDelegate = new RecvMsgCallbackDelegate(RecvMsgCallback);
IntPtr recvCallbackPtr = Marshal.GetFunctionPointerForDelegate(recvMsgbackDelegate);
recvMsgCallback = new SWIGTYPE_p_f_int_p_q_const__char__void(recvCallbackPtr, true);
nrc_interface.recv_message(fd, recvMsgCallback);
AppendText(textBox_ip.Text + " connect success.");
}
else
{
AppendText("Connect fail.");
}
}