1、项目是使用VS2012用Debug调试编译代码时没有出现这个问题,但是换成Release调试编译代码时,出现error LNK2026: 模块对于 SAFESEH 映像是不安全的。
2、网上说只要打开该项目的“属性页”-->"配置属性"-->“链接器”-->“命令行”,然后再将/SAF呶蓟鹭毵ESEH:NO键入“附加选项”框中,然后点击应用即可解决这个问题,但是这只是用调试的时候不报提示错误,“重新生成解决方案”还是会出现警告提示。
3、还有说打开该项目的“属性页”-->"配置属性"-->“C++" -->"预处理器",在预处理器定义的最后面填入:_AFXEXT,再次编译就没问题,我也试了下问题依旧。
4、测试下自己编译的dll文件,新建一个c++项目,然后将ncprogram.lib和ncprogram.dll引入新项目中,然后尝试调用该链接库,测试一个简单的函数,链接设备,dll里面的函数方法,链接成功返回0,链接失败返回1.
5、在新的项目中调用该方法函数,直接获取dll中函数的返回值结果,然后将其转换成char*类型打印出来查看结果:
6、我们可以发现函数正常被调用且将函数返回值抛出,因为这个是FANUC设备的链接方法,所以在本机上是不可能链接成功的,所以这里返回参数即为1
7、这说明程序是没问题的,调用也没问题,应该还是哪里没配置好,经过反复的尝试,我将ncprogram.h头文件进行了小小的修改,再次编译就不在出现dll 链接不一致问题,完整代码如下:
8、这里主要修改了下头文竭惮蚕斗件的结构,将定义#ifdef DL1_API改成了#ifdef HYCOMMONWINAP朐袁噙岿I_EXPORTS,这个在项目:配置属性 -->C/C++ -->命令行 中有指定 /D "HYCOMMONWINAPI_EXPORTS"。