不同编译器编译出来的Dll加载问题
小弟这有一个很老的IBM的C++开发工具VisualAge,现在要把代码转移到VisualStudio上来,都是在Windows XP系统上的。现在遇到一个问题,用Depends打开IBM编译出来的dll是能够正常显示依赖库信息和导出函数信息的,现在有如下几种情况:
1:在VisualStudio里通过LoadLibrary加载,有的dll加载失败,用GetLasterror返回错误值126;
2:在VisualStudio里通过LoadLibrary加载,有时会直接导致VisualStudio崩溃;
3:把这些dll设置成某个项目的Additional Dependency,编译这个项目的时候会报:fatal error LNK1107: invalid or corrupt file: cannot read at 0x378。
求大神解释啊,小弟被整了好几天了也没搞定!
[解决办法]
epends打开IBM编译出来的dll是能够正常显示依赖库信息和导出函数信息.
问题来了,所有依赖的dll都存在吗?我怀疑估计很多DLL都不存,或者版本太旧了。
[解决办法]
下一个Dependency walker 看一下加载的dll是否还依赖其他dll
[解决办法]
不要做A语言代码修改为B语言代码的无用功。
也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
即可很方便地让A、B两种语言之间协调工作。
[解决办法]
ERROR_MOD_NOT_FOUND
126 (0x7E)
The specified module could not be found.
估计是找不到一些依赖的动态库
[解决办法]
共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的:
·进程之间松耦合
·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。
·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。
·方便在线开关服务,只需删除或创建该临时文本文件即可。
·方便实现分布式和负载均衡。
·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满)
·……
[解决办法]