奇怪!为什么mscomm32.ocx在c#中不能用?&& 串口通讯中ReadFile()不能终止

phoenixyf 2003-11-07 11:57:59
1、我下载了一个mscomm32.ocx,注册后,在。NET中添加到工具栏中,但是当我拖到WIN FORM中后,弹出一个错误提示矿说:“您没有使用此ActiveX控件的许可证”。
请问各位大侠怎么解决这个问题?
2、我在程序中添加了一个进程调用ReadFile()函数来侦听串口,但是当ReadFile()在侦听的时候,我想关闭这个调用ReadFile()函数的进程,这时就程序就死掉了。不知道大家有没有遇到这个问题,怎么解决呢??
谢谢!!
...全文
36 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coldbloodnet 2003-11-07
  • 打赏
  • 举报
回复
以前我也碰到过,后来干脆装了个VB6,用它带的MSCOMM32就可以用了。
chinchy 2003-11-07
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx
o1o 2003-11-07
  • 打赏
  • 举报
回复
参与、收藏,我马上也要用那东东了。
513 2003-11-07
  • 打赏
  • 举报
回复
2、我在程序中添加了一个进程调用ReadFile()函数来侦听串口,但是当ReadFile()在侦听的时候,我想关闭这个调用ReadFile()函数的进程,这时就程序就死掉了。不知道大家有没有遇到这个问题,怎么解决呢??


如果在调用平台 invoke 后的任何位置都未引用托管对象,则垃圾回收器可能将完
成该托管对象。这将释放资源并使句柄无效,从而导致平台invoke 调用失败。用
HandleRef 包装句柄可保证在平台 invoke 调用完成前,不对托管对象进行垃圾回收。
例如下面:
FileStream fs = new FileStream(a.txt, FileMode.Open );
StringBuilder buffer = new StringBuilder( 5 );
int read = 0;
ReadFile(fs.Handle, buffer, 5, out read, 0 ); //调用Win API中的
ReadFile函数
由于fs是托管对象,所以有可能在平台调用还未完成时候被垃圾回收站回收。将文件
流的句柄用HandleRef包装后,就能避免被垃圾站回收:
[ DllImport( Kernel32.dll; )]
public static extern bool ReadFile(
HandleRef hndRef,
StringBuilder buffer,
int numberOfBytesToRead,
out int numberOfBytesRead,
ref Overlapped flag );
......
......
FileStream fs = new FileStream( "HandleRef.txt", FileMode.Open );
HandleRef hr = new HandleRef( fs, fs.Handle );
StringBuilder buffer = new StringBuilder( 5 );
int read = 0;
// platform invoke will hold reference to HandleRef until call ends
ReadFile( hr, buffer, 5, out read, 0 );
EdwarddotNet 2003-11-07
  • 打赏
  • 举报
回复
支持coldbloodnet(潇凌)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧