先介绍一下平台
系统:windows server 2008
网络服务:IIS 7.0
需要在web程序里面调用以前封装的c++的dll
工欲善其事,必先利其器。
由于手头没有可安装在64位机器上的vs2008,
于是安装vs2010,由于向下兼容,可以放心的用
有两种思路:
一个是将web程序和c++的dll都编译成64位的
另一种是都编译成32位的
这两种方法我都试过,由于没接触过c++,第一种涉及到
要修改c++代码等工作,走不通,于是放弃,采用第二种方法
为什么在64位机器上可以调用32位的dll,看如下的文章
http://baike.baidu.com/view/3403344.html?fromTaglist
http://www.cnblogs.com/awpatp/archive/2010/02/03/1662767.html
http://kb.cnblogs.com/a/1662767/
http://s.yanghao.org/program/viewdetail.php?i=50570
第一步需要编译web程序,注意选择x86作为目标机器
而不是any cpu。any cpu会根据你的操作系统来选择
到底是64位还是32位。
第二步是建立在你手头有c++源代码。以前编译过的
在win32下的dll这时不能使用,会出现“应用程序的并行配置不正确”
的错误。于是需要重新编译成dll。
由于在64位机器上打开c++源代码有错误。我是在本机上进行重新编译的。
第三步entrypoint name有可能会发生改变。当报“找不到入口点”
错误时,你需要在dependends里面打开该dll,查看每个入口点名字是否符合
第四步 解决调试时带来的问题,我用try catch来捕捉错误,结果导致了
“Thread was being aborted的错误”,解决办法就是去掉try catch
请参照:http://archive.cnblogs.com/a/1963748/
第五步 直接在vs中运行程序ok,但是发布后再运行报错”无法识别的属性targetFramework“
解决办法:参看http://www.cnblogs.com/luzx/archive/2010/04/29/1723677.html