Windows编程中遇到的坑...

网络编程 同时被 2 个专栏收录
2 篇文章 0 订阅
3 篇文章 0 订阅

网络编程

1.现象:使用udp实现局域网搜索功能,发送组播搜索报文后,收到下位机的回复,但是出现丢包现象,未能将所有设备返回的报文接收完毕。

分析:进过抓包,分析表明计算机是接收到所有数据报文的,只是套接字出现接收丢包,原因是同时上传到套接字的数据报文过多,导致udp接收缓冲区无法接收,自动进行丢包处理。

解决:调整套接字接收缓冲区大小即可解决。

2.如果在调试TCP或UDP数据发现数据传输不了,检查一下防火墙是否阻止了应用程序。

3.UDP数据无法通讯,可能是UDP设置了固定地址。

4.UDP发送数据时,若数据包数据过长,容易产生丢包。

5.TCP在接受数据时,缓冲区过小,也会造成丢包情况。(局域网测试)

6.在把指针转换成结构体的时候出现丢数据,很可能是没有使用单字节传输。

 

串口编程

1.波特率不对应会导致数据有误、收不到数据等情况。

 

动态库调用

1.在调用科大讯飞的语音合成服务时,需要使用管理员权限进行调用。

2.C#调用c++实现的动态库时,需要加上系统依赖的库,如c++实现基于MFC架构的库时,需要加上例如mfc100u.dll库,否则会出现加载dll模块失败的错误。

3.C#调用c++动态库时,调用方式一般为stdcall,但是也有以其他规则进行调用,例如网络化SDK,需要以cdecl规则进行调用,回调函数委托也需要以cdecl方式声明。

委托声明[UnmanagedFunctionPointer(CallingConvention.Cdecl)]

函数导入声明CallingConvention = CallingConvention.Cdecl

4.C#调用c++动态库时,如果显示找不到入口点,是因为动态库的实现编写没加上extern c,我们需要将dll文件导出函数,把整个函数名作为入口点。如“?InitLightControl@@YAHPAD0P6GXEE@Z@Z”

 

数据库编程

1.Mysql在默认情况下,提交的命令长度超过1024字节会导致超长,需要root更改其默认长度,具体命令:

set global max_allowed_packet = 2*1024*1024

show VARIABLES like '%max_allowed_packet%';

 

调试环境

1.编写好的软件放到另一台机器上,出事时候会出现莫名其妙的bug或使用过程中出现未知的bug,有可能是系统并未安装上对应的.net framework版本,尤其是在win10上生成的软件放到win7上使用,win7的默认版本为4.0,win10则为4.5。

2.在调试时出现尝试运行项目时出错:无法启动程序 拒绝访问,在网上找到的方案都不大适用,经过排查为360问题,关闭360安全卫士就好了。

 

ICE编程

1.需要使用相同的ice文件空间名才能连接。

2.多个双向连接需要使用回调的方式返回接口

 

代码规范

1.在使用Lambda表达式时,Lambda表达式内如果使用到外部变量,有可能出现使用的外部变量值已发生改变,导致结果不正确。

 

代码应用

1.集合之间的过滤交集参考

var orderNumberList = orderList.Where((x, i) => orderList.FindIndex(z => z.OrderNumber == x.OrderNumber) == i).ToList();

2.播放视频需要使用句柄,可调用winform窗口显示,AllowTransparent为false

3.修改注册表启动项启动软件,会调用系统的库启动,而不是直接启动,这会导致Environment.CurrentDirectory的值变成C:\windows\system32。这里可以把软件放到启动菜单中或者使用AppDomain.CurrentDomain.BaseDirectory代替。

4.利用Mutex实现单进程限制,Mutex需要为全局对象,不能释放。

持续更新ing...

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值