问题:error C2491: “Add” : 不允许 dllimport 函数 的定义
解决:项目属性 -> C/C++ -> 预处理器 -> 预处理器定义 尾部增加 DLL_EXPORT
问题:error C2466: cannot allocate an array of constant size 0
<VS2005安装目录>\VC\include\sys/stat.inl(44) : error C2466: 不能分配常量大小为 0 的数组
解决:
出现这种情况时,只需在 <VS2005安装目录>\vc\include\malloc.h 文件中找到:
#define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr) ]
并改成:
#ifdef PHP_WIN32
#define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr)?(expr):1 ]
#else
#define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr) ]
#endif
或者
修改php-5.2.9源码包中的
main\config.w32.h
将"#define _USE_32BIT_TIME_T 1"注释
(还未调研此宏的作用,有一定风险)
问题:ostream(967) : error C2491: “std::endl”: 不允许 dllimport 函数 的定义
解决:将 #include <regex> 等 include 语句写到 #include "php.h"上面
其他:
将 .C 文件修改为 .CPP
将
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_xystool.h"
语句用 extern "C"{} 包裹 如下
extern "C"
{
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_xystool.h"
}
将ZEND_GET_MODULE(xystool)语句用 extern "C"{} 包裹 如下
extern "C"
{
ZEND_GET_MODULE(xystool)
}
设置工程属性页中的C++->代码生成->运行库改为多线程DLL(/MD),将C++->高级->编译为改为编译为C代码(/TC),链接器->附加库目录加一项PHP二进制包的dev目录。
点生成->配置管理器->活动解决方案配置先Release_TS,平台为win32。
处理完这些后,还要修改PHP源码中Zend/Zend.h,将
#include <stdio.h>
移动到
#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR ';'
#elif defined(NETWARE)
# include <zend_config.h>
# define ZEND_PATHS_SEPARATOR ';'
#elif defined(__riscos__)
# include <zend_config.h>
# define ZEND_PATHS_SEPARATOR ';'
#else
# include <zend_config.h>
# define ZEND_PATHS_SEPARATOR ':'
#endif
的后面去。 还要修改zend_config.w32.h,将
#define vsnprintf _vsnprintf
这行注释掉(否则编译时会提示不能定义大小为0的常量数组和vsnprintf
相关的错误)。
评论