为什么使用VC9构建的PHP SAPI(php5_apache.dll)不能与使用VC6构建的Apache一起工作

时间:2014-08-08 14:04:38

标签: php c++ windows apache visual-c++

正如http://windows.php.net/所宣布的那样,用VC9编译的PHP SAPI(php5_apache.dll)不能与使用VC6编译的Apache一起工作。

  

对于Apache SAPI(php5_apache2_2.dll),请确保使用的是Visual Studio C ++ 9版本的Apache。我们建议使用ApacheLounge提供的Apache构建。对于任何其他SAPI(CLI,FastCGI通过mod_fcgi,FastCGI与IIS或其他支持FastCGI的服务器),一切都像以前一样工作。第三方扩展提供程序必须重建其扩展,以使它们与我们现在提供的Visual Studio C ++ 9版本兼容和加载。

但是,使用任何版本的VC(vc11,vc9,vc6)构建的DLL,甚至是Borland C ++,应该能够被任何版本的二进制文件(DLL或EXE)加载和执行,没有任何问题。

为什么使用VC9编译的PHP SAPI(php5_apache.dll)作为DLL不能与使用VC6编译的Apache一起工作?

1 个答案:

答案 0 :(得分:1)

But, a DLL built with any version of VC(vc11, vc9, vc6), even Borland C++, should be able to be loaded and executed by any version of binaries (DLL or EXE) with no problem.

加载是(例如,使用LoadLibrary API调用),这应该有效。现在,无论您是否可以调用导出的函数并让它们正常工作,这都是另一回事。

如果导出的函数接受或返回不是通用Windows类型的类型(即DWORD,LONG,BOOL等,以及指向这些类型的指针),那么所有投注都将关闭。如果类型是可以在版本之间具有不同内部的类或结构,或者使用动态内存分配,则尤其如此。

如果Apache的作者认为现在有必要将DLL的版本与某个编译器匹配,他们就不会在不进行研究的情况下宣布这一点。他们很可能发现,由于DLL和应用程序使用的参数和/或返回类型的内部变化,它确实是必需的。