lightopc在32位win7系统中的无法启动故障(0xc000000d)

给客户做的一套工业物联网OPCserver软件,在多台电脑调试过正常:xp(x86)、win7 x64、win10 x64。谁知客户刚收到就在自己的win7(x86)电脑上报“应用程序无法正常启动”:

lightopc在32位win7系统中的无法启动故障(0xc000000d)_第1张图片

把自己公司的一台x86旧电脑装了win7测试果然如此。告诉了客户测试结果,客户说现场很多工控软件只能运行于x86电脑没法升级硬件。

只好从自己身上找问题了。想尽一切办法,内事问百度、外事问谷歌(www.google.com),也没有解决清楚。

发现报这个故障的很多,但大多是玩游戏涉及光盘时出现。

后从论坛得知是因为调用dll造成,用Depends可以追踪。但试了一下也没弄出个所以然来:

.......
00:00:00.936: 加载 "c:\windows\system32\NETUTILS.DLL" 于地址 0x75AC0000。  成功挂接模块。
00:00:00.951: 加载 "c:\windows\system32\SRVCLI.DLL" 于地址 0x75AA0000。  成功挂接模块。
00:00:00.983: 加载 "c:\windows\system32\WKSCLI.DLL" 于地址 0x75A90000。  成功挂接模块。
00:00:02.979: 已退出 "e:\hunan\00\OPC.EXE" (进程 0x1D1C),代码 -1073741811 (0xC000000D)。

刚好自己的程序调用了3个dll,一个sqlite3.dll这是久经考验的,应该没有问题。另外两个是lightopc的——lightopc.dll、unilog.dll。

unilog.dll是日志库,可以不要,就删掉日志记录部分重新编译,调到win7(x86)启动,ok!

没精力来处理unilog.dll,虽然有源代码。

墙外的世界看了下,原来欧洲好多搞工控的大牛依然和我一样用着18年前的BCB 6.0,而且好多古老的工控软件都必须x86,信心满满!

 

也发现一个结论——项目所在的磁盘格式不是NTFS!

你可能感兴趣的:(bcb,OPC,C++)