VC DLL接口的声明里有Query(HANDLE hComm,int nUnitNo)其中第一个参数 就是串口句柄
请教如何把C#里面的serport控件的句柄传过去
C#里面定义 handle 应该就是指 intptr。serialport如何转成intptr??
我查了一下,发现serialport控件没有句柄这一说,网上很多人说用creatfile的方法实现
但是软件结构已经生成,无法改成creatfile!!
希望各位知道解决问题的大侠给予帮助,在线等待
路过的帮忙顶一下,不胜感激!
请教如何把C#里面的serport控件的句柄传过去
C#里面定义 handle 应该就是指 intptr。serialport如何转成intptr??
我查了一下,发现serialport控件没有句柄这一说,网上很多人说用creatfile的方法实现
但是软件结构已经生成,无法改成creatfile!!
希望各位知道解决问题的大侠给予帮助,在线等待
路过的帮忙顶一下,不胜感激!
var serialPort = new SerialPort();
object stream = typeof(SerialPort).GetField("internalSerialStream", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(serialPort);
var handle = (SafeFileHandle)stream.GetType().GetField("_handle", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(stream);
IntPtr phandle = handle.DangerousGetHandle();http://stackoverflow.com/questions/6414043/can-i-get-the-device-handle-for-a-serial-port-that-i-am-accessing-using-the-net未测试
var sp = new SerialPort();
sp.PortName = "COM4";
sp.StopBits = StopBits.One;
sp.Parity = Parity.None;
sp.DataBits = 8;
sp.BaudRate = 9600;
sp.Open();
object stream = typeof(SerialPort).GetField("internalSerialStream", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sp);
var handle = (SafeFileHandle)stream.GetType().GetField("_handle", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(stream);
IntPtr phandle = handle.DangerousGetHandle();部分代码,但是获得的句柄传输给VC dll 的时候,无法送串口输出数据,可能这个获得的句柄无用
在我想来:你的VC Dll中一定有打开串口的函数,
比如:OpenCom之类的函数,使用这个函数应该会返回一个串口的句柄,
你要使用的是这个句柄。
现在的问题是,这个获得的串口句柄可能不正确,请假正确的获得串口句柄的方法