你妹的情人节,今天搞了一天的dll的动态加载。
Here is the thing. 项目中我用写了一个类,GNU编译器测试可用。提交给使用类的同志时,他发现我的类在编译时有问题。就是那万恶的vc宽字符,我也懒得改了干脆商量着做成dll吧。好嘛,三下五除二,没要两分钟写了个dll出来,又写了个测试程序,同样在g++ 下测试通过。拿过去给那位同志用,怎料头疼的事情就这样开始了。类导不出来……我滴,搞了一个上午发现GNU与VC在实现Dll中的类是使用不同的策略与方式的,说白了二者不能相互调用!!!难道要我重新用VC写?肿么可能呢!好吧,我干脆用函数将类实现的主要功能封装起来,直接提供函数供项目使用。同样我还是使用GNU编译器……疼了,就栽在使用不同的编译器上了。在使用VC调用我写的Dll时,动态加载怎么也成功不了……经过长时间的郁闷后终于发现在使用LoadLibrary时,加载的dll一定要有dllMain函数,不然……LoadLibrary默认返回NULL!!!(因为LoadLibrary就是看DllMain的返回值返回东西,你都没有DllMain……不说了)
总结一下,一个项目中编译器最好统一!!!!不然……后果很严重。