日期:2014-05-18  浏览次数:20913 次

c# serialport控件传递句柄给VC DLL接口的方法
VC DLL接口的声明里有Query(HANDLE hComm,int nUnitNo)其中第一个参数 就是串口句柄
请教如何把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

未测试
------解决方案--------------------
你确定是这么做的?
在我想来:你的VC Dll中一定有打开串口的函数,
比如:OpenCom之类的函数,使用这个函数应该会返回一个串口的句柄,
你要使用的是这个句柄。
------解决方案--------------------
我觉得你要打开串口才能获得句柄吧,c#调用VC DLL打开串口,成功就应该得到一个串口句柄了
------解决方案--------------------
同求答案,帮顶下