因为项目需要,要使用CxImage进行图像处理,于是开始了学习之旅。但很不顺利....
其实CxImage提供了这么多的工程,编译出来无非就是个库,但我确出现了个链接的错误,就这个链接错误花了我两天的时间解决。
当出现dll连接错误的时候,我的第一感觉就是,调用约定有问题!但找了一下,没有找到调用约定的问题,类都是使用-decse 的调用约定。
接着我想是我的工程配置有问题,于是我去比对CxImage提供的demo工程,还是没有发现有什么不对的地方。应该说我的解决问题的方向是对的,可惜没有深入的去找到问题。第二天的时候,才沉下心了,找到了真正的问题。
因为CxImage提供的工程编译出来的是multebyte 不是Unicode 所以编译出来的lib是不一样的,所以会出现无法链接的问题!
bool __thiscall CxImage::Load(wchar_t const *,unsigned long)"
这是用工具看dll导出的名称?Load@CxImage@@QAE_NPBDK@Z
这是无法链接工程提示的名称?Load@CxImage@@QAE_NPB_WK@Z
比对后发现就D 和-W的不同
查看网络资料,D表示char -Wb表示wchar 问题出来拉!
查看工程属性general 的char set(字符集)果然是这里不同!!!!
总结一下:
当发现DLL无法链接的时候,问题肯定出在lib,这时你要看你的lib是不是最新的,和.h文件的描述是一致的。
注意调用约定的问题!
注意UNICODE的问题!
注意dll hell!!