1、cmd进入命令行模式,并进入php-5.6.20-src/ext源代码的ext目录下
输入命令php ext_skel_win32.php --extname=HelloWord,执行结果如下图:

执行后在ext目录下多了HelloWord文件夹

文件夹中的HelloWord.dsp是Viscual C++的工程文件

从php的安装目录中的dev文件夹下,找到php5ts.lib,复制到创建的HelloWord扩展目录下

用Vs2012打开HelloWord.dsp工程文件,调试模式选择Release模式,

F5启动调试,发生错误,提示如下:
c:\php-5.6.20-src\zend\zend_config.w32.h(25): fatal error C1083: 无法打开包括文件:“../main/config.w32.h”: No such file or directory

说明main/config.w32.h文件缺失,网上搜索了诸多办法,均失效,或许是以前的版本有效,现在这里提供正确的解决办法:

添加config.w32.h文件
在php源代码文件目录里搜索config.w32.h,在C:\php-5.6.20-src\win32\build文件夹里找到config.w32.h.in,将这个文件复制到C:\php-5.6.20-src\main文件夹里,去掉后面的.in
注意:为了让扩展能和php运行环境严格匹配,要根据你的php运行环境的编译版本(php5.6.20是VC11编译的),在config.w32.h文件里加上:
#define PHP_COMPILER_ID "VC11"

此时再重新编译,编译成功,在php-5.6.20-src目录下生成了Release_TS目录,里面有生成的扩展文件php_HelloWord.dll

此时我们将php_HelloWord.dll拷贝到C:/php/ext目录下,并设置php.ini文件增加extension=php_HelloWord.dll,并重启Apache服务器
此时我们用phpinfo()函数测试,发现已经成功安装了php_HelloWord.dll扩展

打开HelloWord.c文件
找到如下函数:

PHP_FUNCTION(confirm_HelloWord_compiled)
{ char *arg = NULL;
int arg_len, len;
char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
} len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "HelloWord", arg);
RETURN_STRINGL(strg, len, 0);
}

在下面增加函数HelloPHP

PHP_FUNCTION(HelloPHP)
{
RETURN_STRING("Hello PHP Ext!", 1);
}

找到如下代码:

const zend_function_entry HelloWord_functions[] = {
PHP_FE(confirm_HelloWord_compiled, NULL) /* For testing, remove later. */
PHP_FE_END /* Must be the last line in HelloWord_functions[] */
};

并修改如下:

const zend_function_entry HelloWord_functions[] = {
PHP_FE(confirm_HelloWord_compiled, NULL) /* For testing, remove later. */
PHP_FE(HelloPHP, NULL)
PHP_FE_END /* Must be the last line in HelloWord_functions[] */
};

重新编译,生成php_HelloWord.dll

此时将php_HelloWord.dll复制到php/ext目录下,我们编写测试php代码如下:

<?php
echo HelloPHP();
?>

可以看到执行结果:

自此第一个简单的扩展开发完成!

基于Visual c++ 2012的php扩展开发 - HelloWord!的更多相关文章

  1. 基于Visual c++ 2012的php扩展开发 - 环境搭建

    软件准备 Apache2.4 php-5.6.20-Win32-VC11-x86 php-5.6.20-src mysql-5.5.45-win32 vcredist_x86.exe vs2012旗舰 ...

  2. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)

    本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...

  3. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)

    前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...

  4. 在Visual Studio 2012中使用VMSDK开发领域特定语言1

    在Visual Studio 2012中使用VMSDK开发领域特定语言(一)   前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...

  5. 【转】visual studio 2012进行C语言开发[图文]

    原文网址:http://blog.csdn.net/chengyafei0104/article/details/9826025 现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在 ...

  6. visual studio 2012进行C语言开发[图文]

    现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在我们现在的Win7,win8下面会出现一些比如不兼容了之类的问题.其实,用微软强大的IDE-visual studio系列,也是可 ...

  7. 用Visual Studio 2012+Xamarin搭建C#开发Andriod的环境

    第一步:安装Visual Studio: Visual Studio 2012(或者Visual Studio 2010),原因是目前为止Xamarin for Visual Studio的插件只支持 ...

  8. 基于Visual C++2012拆解世界五百强面试题--题3

    请用C语言实现 输入N,打印N*N矩阵 比如 N = 3, 打印: 1 2 3 8 9 4 7 6 5 N = 4, 打印 1   2    3   4 12  13   14  5 11  16   ...

  9. 使用 Visual Studio 2012进行C语言开发

    1.打开visual studio,选择菜单[文件]->[新建]->[项目],将会弹出新建项目对话框 2.在弹出的新建项目对话框中,选择和填补相应的属性. 3.点击确定之后,会跟着弹出应用 ...

随机推荐

  1. Struts2 异常处理

    Struts提供了一个更简单的方式来处理未捕获的异常,并将用户重定向到一个专门的错误页面.您可以轻松地Struts配置到不同的异常有不同的错误页面. Struts的异常处理所使用的“exception ...

  2. ansible使用

    常用ad hoc命令, 如:ansible raleigh -m shell -a 'echo $TERM' ansible webservers -m service -a "name=h ...

  3. Android记住password后自己主动登录

    /**  *   * @author alex  * @version 2014-7-31下午5:25:45  *  */ public class LoginActivity extends Act ...

  4. CGAffineTransform函数旋转操作

    本文转载至  http://blog.sina.com.cn/s/blog_923fdd9b0101ahyx.html   首先获取UITableView的CGAffineTransform函数:CG ...

  5. centos6.4下安装mysql5.7.18

    1.安装前工作 在安装前需要确定现在这个系统有没有 mysql,如果有那么必须卸载(在 centos7 自带的是 mariaDb 数据库,所以第一步是卸载数据库). 卸载系统自带的Mariadb: 查 ...

  6. (转)gethostbyname() -- 用域名或主机名获取IP地址

    struct hostent *gethostbyname(const char *name); 这个函数的传入值是域名或者主机名,例如"www.google.cn"等等.传出值, ...

  7. 《从零开始学Swift》学习笔记(Day 38)——构造函数与存储属性初始化

    原创文章,欢迎转载.转载请注明:关东升的博客 构造函数的主要作用是初始化实例,其中包括:初始化存储属性和其它的初始化.在Rectangle类或结构体中,如果在构造函数中初始化存储属性width和hei ...

  8. 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字

    Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字 原创文章,欢迎转载.转载请注明:关东升的博客 看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后 ...

  9. 【转】C#操作Word的超详细总结

    本文中用C#来操作Word,包括: 创建Word: 插入文字,选择文字,编辑文字的字号.粗细.颜色.下划线等: 设置段落的首行缩进.行距: 设置页面页边距和纸张大小: 设置页眉.页码: 插入图片,设置 ...

  10. 关于微信小程序的开发步骤

    ~~~~包子最近在研究小程序 首先先讲一下小程序一些基本的步骤: 1.登录微信的公众平台,选择小程序,注册一个账号,期间有碰到什么交300块钱的就不要理他,因为我只是做demo,当然,准备上线的企业啥 ...