雷塞SMC304系列控制器VC6.0例程在VS2015下编译遇到的若干问题及解决办法
雷塞SMC304系列控制器VC6.0例程在VS2015下编译遇到的若干问题及解决办法
标签(空格分隔): 雷塞 SM304 WIN10 VS2015
最近由于导师要求,负责喷涂机器人的控制部分,接触到雷塞公司的控制器产品SM304,首先想着从给的例程入手,但由于例程是VC6.0的程序,而我的电脑是WIN10系统,用VC6.0起来十分的不方便,因此想到在VS2015下重新编译一遍源代码,下面是编译过程中遇到的一系列问题。
0.在VS2015中创建一个空项目,将例程中所有文件按类别导入
配置:
(1)链接器–>系统–>子系统
选择:“窗口 (/SUBSYSTEM:WINDOWS)”
参考:MFC 必须定义入口点 解决办法
如果未配置出现错误:
d:\vs2015\vc\atlmfc\include\afx.h(38): warning C4996: ‘MBCS_Support_Deprecated_In_MFC’: MBCS support in MFC is deprecated and may be removed in a future version of MFC.
1> d:\vs2015\vc\atlmfc\include\afx.h(33): note: 参见“MBCS_Support_Deprecated_In_MFC”的声明
1> _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1> DMCd1DLG.cpp
1> DMCd1.cpp
1>LINK : fatal error LNK1561: 必须定义入口点
(2)配置属性–>常规–>MFC的使用
选择:“在共享DLL中使用MFC”
参考:在共享DLL中使用MFC
如果未配置出现错误:
1>d:\vs2015\vc\atlmfc\include\afx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
1> DMCd1DLG.cpp
1>d:\vs2015\vc\atlmfc\include\afx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
1> DMCd1.cpp
1>d:\vs2015\vc\atlmfc\include\afx.h(24): fatal error C1189: #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
(3)配置属性–>常规–>字符集
选择:“使用多字节字符集”
参考:CWnd::MessageBoxW”: 不能将参数 1 从“const char [16]”转换为“LPCTSTR
如果未配置出现错误:
1>g:\喷涂机器人\spraying robot\spraying robot\dmcd1dlg.cpp(90): error C2664: “int CWnd::MessageBoxW(LPCTSTR,LPCTSTR,UINT)”: 无法将参数 1 从“const char [11]”转换为“LPCTSTR”
…
1> g:\喷涂机器人\spraying robot\spraying robot\dmcd1dlg.cpp(181): note: 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
(4)配置属性–>C/C++–>预编译头
选择:“创建 (/Yc)”
参考:有关无法打开预编译头文件错误的思考
如果未配置出现错误:
1>d:\vs2015\vc\atlmfc\include\afx.h(38): warning C4996: ‘MBCS_Support_Deprecated_In_MFC’: MBCS support in MFC is deprecated and may be removed in a future version of MFC.
1> d:\vs2015\vc\atlmfc\include\afx.h(33): note: 参见“MBCS_Support_Deprecated_In_MFC”的声明
1> _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1.错误1:Enable3dControls问题
参考:Enable3dControls警告
1.1 错误信息
1>g:\喷涂机器人\spraying robot\spraying robot\dmcd1.cpp(53): error C4996: ‘CWinApp::Enable3dControls’: CWinApp::Enable3dControls is no longer needed. You should remove this call.
1> d:\vs2015\vc\atlmfc\include\afxwin.h(5224): note: 参见“CWinApp::Enable3dControls”的声明
1.2 解决方法
定位到代码:
#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL
#elseEnable3dControlsStatic(); // Call this when linking to MFC statically
#endif
主要由于版本问题所导致的,Windows95以后就不需要再调用这两个函数了,因此使用_MSC_VER对其进行隔离即可:
#if _MSC_VER <= 1200 // MFC 6.0 or earlier #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif
#endif
2.错误2:外部符号无法解析
参考:vs2015引用lib库
2.1 错误信息
1> DMCd1.cpp
1>DMCd1DLG.obj : error LNK2019: 无法解析的外部符号 _smc_board_init@16,该符号在函数 “protected: virtual int __thiscall CDMCd1Dlg::OnInitDialog(void)” (?OnInitDialog@CDMCd1Dlg@@MAEHXZ) 中被引用
…
1>DMCd1DLG.obj : error LNK2019: 无法解析的外部符号 _smc_get_position_unit@12,该符号在函数 “protected: void __thiscall CDMCd1Dlg::OnTimer(unsigned int)” (?OnTimer@CDMCd1Dlg@@IAEXI@Z) 中被引用
1>G:\喷涂机器人\Spraying robot\Debug\Spraying robot.exe : fatal error LNK1120: 17 个无法解析的外部命令
2.2 解决方法
(1)配置属性–>C/C++–>常规–>附加包含目录
添加:你的LTSMC.lib所在目录
(2)配置属性–>链接器–>输入–>附加依赖项
添加:LTSMC.lib
(3)将对应的dll文件放到与exe同一级目录下
3.显示结果
编译后得到一个简易的控制软件界面,连接好SMC304后根据文档设置好以太网参数即可直接控制,随后便在VS2015上对程序进行进一步修改,实现自定义控制!
例程软件界面:
SMC304用户手册内容:
本例中的 SMC304 的 IP 地址为 192.168.5.11, PC 机设置的 IP 与 SMC304 的 IP 前 3 个字段要相同,第 4 个字段要不同。如图 3-8 所示, PC 机设置的 IP 设为 192.168.5.6 即可。
PS:由于雷塞公司提供的是32位库,因此编译的时候必须选择x86
雷塞SMC304系列控制器VC6.0例程在VS2015下编译遇到的若干问题及解决办法相关推荐
- [转]VC6.0无法打开文件和无法向工程添加文件的解决办法
今天用VC开发的时候,新建两个类后,发现没有要类视图那里显示,在文件那里也没看到,于是就想自己手动把这两个类加到工程中去,没想到一点添加文件就发生内存读写错误.开始以为是软件出错了,重启软件后,还是一 ...
- vc6.0使用PathFileExists(...)函数的时候链接错误的解决办法
PathFileExists(...)函数使用的时候链接错误: error LNK2001: unresolved external symbol __imp__PathFileExistsA@4 首 ...
- 运行报Invalid property 'specParamList[0][specName]' of bean class [com.model.Produ... 报错的解决办法
运行报Invalid property 'specParamList[0][specName]' of bean class [com.model.Produ... 报错的解决办法 前端需要进行JSO ...
- 三菱FX系列PLC电池电压低导致程序参数丢失,PROG.E报警灯闪烁的解决办法
三菱FX系列PLC电池电压低导致程序参数丢失,PROG.E报警灯闪烁的解决办法 由于长时间断电,重新开机后,操作人员反映设备无法启动,查看PLC面板报警如下图所示: 此时电源灯POWER正常: 运行灯 ...
- VC6.0 在WIN10专业版下如何完美运行。(附西红柿助手)
记录一下碰到的问题; 戴尔G系列笔记本,由于项目维护需要装VC6.0,安装过程有过几个报错,但是也能运行,也能编译,就是没有回退键.查找变量及其麻烦.后续在网上找到了一个版本的VC6.0以及西红柿助手 ...
- 解决安装VC6.0后出现MSDEV.EXE错误,无法用打开工程解决方法
问题:安装VC6.0后,在打开项目或添加文件时,出现如下错误: 可能导致原因:由于Ms安装软件的兼容性问题,导致VC6.0安装不完全, 解决方法:--网上打sp6补丁的方法貌似不可用,所以可以采用另一 ...
- “约见”面试官系列之常见面试题之第四十九篇之ie6bug的解决办法(建议收藏)
IE6浏览器的bug问题及相关解决的方法 1.css浮动边距加倍错误(双倍边距BUG)的解决办法 该错误只影响ie而不影响其他浏览器,我们可以考虑用hack来解决!!! 解决方法:_displ ...
- 新浪微博oauth2.0弹出验证dialog中输入框被输入法覆盖的解决办法
关于新浪微博oauth2.0弹出dialog验证时,输入框会被输入法覆盖的问题的一个解决办法. 方法一: 由于我在做项目支持新浪微博的时候是直接引入新浪SDK源文件的(网上有很多相关的文章, ...
- .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法
行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...
最新文章
- 突发 | Yann LeCun卸任!Facebook变天,做AI不能落地是不成了
- 【干货】从国外知名网站看用户体验4个基本标准
- tomcat问题记录-线程池引发的问题
- MySQL编程技巧_MySQL编程中的6个重要的实用技巧
- 如何在c语言中源文件调用另一个源文件的函数
- 为什么使用了索引,查询还是慢?
- 如何找到ngrx action匹配的取数据代码 - 谈谈Spartacus Product Carousel控件数据的读取
- 用javascript实现有效时间的控制,并显示要过期的时间
- perfdog 性能狗之Jank
- Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)
- springboot 常用插件
- android获取按钮上的字,Android--在一个Button上显示不同类型的字体
- xendesktop更新计算机,XenApp / XenDesktop 7.6 初体验二 配置计算机目录和交付组
- 关于U盘还原安装Mac系统
- 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day3)
- 关于Iphone 4 如何用itunes备份短信等设置
- c++语言如何判断奇偶数,C++ 判断奇数偶数
- Android app跳转QQ加人聊天或者加群
- 华理c语言设计网上作业,华理网上作业 之 大学英语预备
- redis集群模式登陆