
bcb
华山沦贱
混迹江湖20载一事无成
展开
-
BCB版的串口枚举
做自控近20年,脱离不了串口通信。原来需要获取电脑的串口时,采用的是读取注册表法,一直以来也使用正常。除非电脑系统问题造成多余的虚拟串口或usb串口号,清理下注册表即可: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \COM Name Arbiter, 删除数值项ComDB即可。但是随着业务的扩展,面对原创 2018-01-31 16:53:35 · 986 阅读 · 0 评论 -
无法插入空行.行必须至少有一个列值集
ADO写入数据库,一段老代码运行却报错——无法插入空行.行必须至少有一个列值集。搜索了下,有说关键字未赋值、Post()改UpdateBatch()等等。改UpdateBatch()后,确实不报错了,但是查询数据库未发现写入记录。换个结构类似表写入,却正常。无非是数据库字段定义问题了。 AT->TableName = "TemHum"; AT-&g...原创 2019-01-03 13:27:52 · 1513 阅读 · 0 评论 -
当sprintf遇到string
一直都知道sprintf使用string参数时一定要用.c_str()转换为char*之后才行,否则就会出现“(NULL)”。一次疏忽,在sprintf中发现“(NULL)”,但是此参数是一个char*,无论如何找不到char*成为“(NULL)”的原因。后对sprintf的每次参数详细检查时才发现这个char*前一个参数是string,忘了转成char*,它自己没有变成“(NULL...原创 2018-12-29 14:48:51 · 3564 阅读 · 1 评论 -
BCB控制台输出中文的问题
BCB6控制台输出中文是没有问题的,但是wcout输出宽字符中文(wchar_t)是不正常的,但wprintf输出是正常的。在CB10中可以设置: setlocale(LC_CTYPE, ""); //wprintf wcout.imbue(locale("",LC_CTYPE)); //CB10 可行但在CB6中是不行的,而cout输出中文的是很正常的的...原创 2018-11-15 19:27:56 · 574 阅读 · 0 评论 -
修改一个操作ini的类
最近一个项目需要用到读写ini配置文件,以往都是用BCB内置的引用 一个通用ini配置文件操作类 发现其新建一个ini和增加、读取都没有问题,但修改就不正常了。调试发现是其缺少了一句修改语句。修改后完整源文件如下://---------------------------------------------------------------------------#ifnde...转载 2018-11-10 15:20:57 · 210 阅读 · 0 评论 -
MD5报pointer underrun的故障解决
调试网上MD5的C++经典代码时,打开BCBd的CodeGuard会报错pointer underrun,尤其是验证字符串过长时。打断点出现在 void MD5::update(const unsigned char input[], size_type length) 末尾一句: /* Buffer remaining input */memcpy(&_buffer[inde...原创 2018-09-07 11:03:41 · 194 阅读 · 0 评论 -
终于过渡到CB10.2了
为了做界面炫彩些,便于商务上更好操作,不得不把使用了17年的bcb6.0升级了。因为近几年的插件几乎没有BCB版的了。经过了一段难受的磨合期,发现CB10.2还是蛮不错的,兼容性也很好。API串口类、tcp、OPC都过渡得挺顺利,注意要字符串就OK了。以后后台程序用BCB,前台用CB。...原创 2018-07-10 20:23:07 · 400 阅读 · 0 评论 -
用map嵌套vector实现multimap功能
最近迷上了泛型编程,在一个项目中需要用到一个变长映射,于是用map+vector+结构体实现了multimap的基本功能。特改个demo存档。//---------------------------------------------------------------------------#include <map>#include<vector>#includ...原创 2018-06-13 10:46:29 · 2104 阅读 · 0 评论 -
测试OPCServer内存泄漏虚惊一场
十年前用C++玩会opc client后就一直想玩server,但因工作原因一直没有使用的机会和紧迫感,也因为其难度,就一直搁置着。年后因为新的工作原因,必须搞会opc server。自知年纪大了,从头啃COM技术几乎是不可能,使用网上现成的dll又担心不稳定或是出问题后不知如何查故障。后从老毛子网站得到了lightopc的源码,便花了半个月啃下了这个,虽然已经是15年前的技术,但依然...原创 2018-05-07 17:04:34 · 1083 阅读 · 0 评论 -
lightopc在32位win7系统中的无法启动故障(0xc000000d)
给客户做的一套工业物联网OPCserver软件,在多台电脑调试过正常:xp(x86)、win7 x64、win10x64。谁知客户刚收到就在自己的win7(x86)电脑上报“应用程序无法正常启动”:把自己公司的一台x86旧电脑装了win7测试果然如此。告诉了客户测试结果,客户说现场很多工控软件只能运行于x86电脑没法升级硬件。只好从自己身上找问题了。想尽一切办法,内事问百度、外事问谷...原创 2018-05-10 22:13:41 · 1435 阅读 · 0 评论 -
未解决的外部引用
BCB 6.0使用别人的开发包或引用类时经常出现 Unresolved external '*****' referenced from 的错误,往往编译没有问题,打包时才报错,极困扰!这主要是以下3个的问题:其一,引用了其他类,虽然加了头文件,但是没有将cpp文件添加进来。工程——添加到工程。或是 查看——工程管理器,鼠标操作。其二,声明了extern全局变量,定义在lib没有添加进来,#pra...原创 2018-04-21 19:35:15 · 2153 阅读 · 0 评论 -
BCB临界区的使用
使用BCB陆续十多年了,因为一直在工控领域主要是做串口和网络通信类的小软件,BCB6.0足够用,对C++应用得并不是很深。 在读写外部设备时也会用多线程(为了避免主程序在操控过程中的卡顿),如串口和数据库,最主要还是操作数据库,开几个线程来分开独立读写数据库还是挺自在的。但因为自己的项目中几乎没有出现同时写一个表的情况,所以都是在主程序中控制多线程的写入数据库时机,多少年...原创 2018-03-10 21:50:05 · 634 阅读 · 0 评论 -
BCB版的串口枚举2
又无意中看到 MFC实现的串口通信助手 中的一段枚举串口代码,拿过来几乎不改动就可以在bcb6.0里运行了,可是会显示个Com0 出来,断点测试原程序有个小bug,见如下:OSVERSIONINFO osvi;osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);BOOL bGetVer = GetVersionEx(&osvi);if(b...原创 2018-02-02 11:34:32 · 430 阅读 · 0 评论 -
OPC异步读与同步读的区别
一直用C++操作opc搞工控十多年了,从来都是同步读写,因为时效性并不要求过高,所以秉承“够用就行”的原则。其次也是因为同步读对异常处理比较方便。近来研究异步读写时,发现读取的数值与同步读取数值完全不一样,似乎顺序是乱的。待认真研究代码后才发现,同步和异步的读取还是有本质区别的,不仅仅是异步回调的区别。同步读取函数: virtual HRESULT STDMETHODC...原创 2019-01-16 10:19:48 · 3866 阅读 · 1 评论