Jul 17

4年前用VS2005的C#编写了一个应用程序,用于调试VC++写的AMINE计算包。自从发布出去以后,就已经很久没有用过了。这两天有要求要重新改良一下这个软件,于是把这个程序移植到了VS2010,在Windows 7 64bit下重新编译通过,但是当运行case时,却发现出问题了。

界面每次调用DLL中的amDBRInitialize()进行初始化时,就报错。试了一下放在我的VM下的32bit的WIN7,XP下,也都会出这问题。但是在别人的windows XP下就是好的,在我另一台XP下也是好的。更奇怪的时,用以前vs2005编译的界面和DLL,也都存在同样的问题。

还好VS下抓错误信息很方便,错误为An attempt was made to load a program with an incorrect format.

查找后发现,这还是因为x86和x64兼容性的问题。因为dll是32位编译的,而编译界面时,无论以前的VS2005还是现在的VS2010,用的都是any cpu,结果在此64位计算机上,就出现了调用不谐调--64位的程序调用32位的DLL。所以,在VS2010上,把编译指令从ANY CPU改成X86就能解决问题。

修改以后,错误消失,这个问题算是解决了。但是奇怪的是,为什么之前在VM的32位的OS也一样不行呢?

Tags: , , , , , ,
Feb 9

在windows 7 64位上新装了Delphi 6,编译AMSIM时一切正常,但是编译solids时,出错compiled with a different version of XXX。试着重新下载了最新的源文件,尝试rebuild all projects,都报同样的错。

后来发现,出错的文件是SOLIDS和PVTPRO共用的单元文件,该文件存放在PVTPRO的目录里,里面使用了{$IFDEF}预编译指令来对不同的项目使用了不同的代码,在SOLIDS进行编译时,因为找不到这几个文件的源文件,所以直接引用了DCU,而在PVTPRO中编译过的DCU文件与在SOLIDS应该使用的有所不同,就出现了compiled with a different version of XXX的错误。要解决这个问题,就要使不同的项目在编译时,都需要找到这几个源文件并重新编译。

解决方法:在SOLIDS的project options中,在Directory/Search path中把那几个源文件所在的目录加进去。再编译,通过。

分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]