IIS不能加载ISAPI FILTER的原因

ISAPI FILTER值需要正确导出两个函数即可。不过有时候,你在VS2008上面编译的FILTER却不能被加载,在IIS上一直显示着向下的红色箭头。原因有多种,这里我就分享一种我碰到的,也算是比较郁闷的一种情况。

下面是我的例子

代码简单如斯,函数也成功导出,但是在IIS下面却死活不能加载。这个问题前几天让我困惑了整整一个下午,当时是采取别的方法解决了问题。之后我又重新研究了一下这个问题。

当我用PEditor打开我的dll的时候,两个导出函数静静的躺在那里,因为用的是def导出的,所以导出函数方面应该不会有什么问题。

当我用PEEDITOR查看导入表的时候,发现了下面的情况

为什么这种情况,是有问题的呢?因为我用的系统是Win7的,这当然没问题。而我测试ISAPI FILTER的机器是win2003的,这就有大大的问题了。你不妨可以取win2003下面找找,有没有MSVCR90.dll这个文件。是的,没有。尼玛,文件都没有这个dll怎么能在win2003下加载成功啊...

但是IIS加载dll的时候又不会跳出什么消息提示,只是在日志里面轻轻的写着一些模模糊糊的东西叫人去琢磨...

好吧,既然2003里面没有MSVCR90.dll,那就换一个低一点的版本上去...可是怎么换呢,编译器又不是我开发的...好吧百度,百度了一下,终于找到了一个答案。说这是VS2008的一个BUG.

解决方案就是:

在,项目-属性-配置属性-MFC的使用,选择在静态库中使用dll,确定->编译.不管他同步通过,再做同样的地方,把这个选项改回来“使用标准的windows库”,再编译。

这时你就会发现,生成的DLL的导入表里面,竟然没有MSVCR90.dll了...(至少我这个简单的例子是没有了),

在把这个dll拿到2003上面去,访问一下,这个dll就已经被加载了,显示着一个绿色的向上的箭头.



文章来自: 本站原创
Tags:
评论: 5 | 查看次数: 8796