0

C コードで PHP 拡張機能を作成することに感銘を受けました。私はすでにリンクを参照し、それらが提供する手順に従いました。

http://netindonesia.net/blogs/risman/archive/2008/06/15/part-2-writing-php-extension

http://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/

それでも、拡張機能を作成する際に問題が発生しました。

Windows 7 で PHP バージョン 5.4.16 の XAMPP と Visual Studio 2010 Professional を使用して、C++ コードを作成およびコンパイルしています。

次の C++ コードを使用しています。

 #include "stdio.h"
 #include "stdafx.h"
 /* declaration of functions to be exported */
 ZEND_FUNCTION(DoubleUp);

/* compiled function list so Zend knows what's in this module */
zend_function_entry FirstPHPExtModule_functions[] = {
     ZEND_FE(DoubleUp, NULL)
     {NULL, NULL, NULL}
};

/* compiled module information */
zend_module_entry FirstPHPExtModule_module_entry = {
     STANDARD_MODULE_HEADER,
     "FirstPHPExt Module",
     FirstPHPExtModule_functions,
     NULL, NULL, NULL, NULL, NULL,
     NO_VERSION_YET, STANDARD_MODULE_PROPERTIES
};

/* implement standard "stub" routine to introduce ourselves to Zend */
ZEND_GET_MODULE(FirstPHPExtModule)

/* DoubleUp function */
/* This method takes 1 parameter, a long value, returns the value multiplied by 2 */
ZEND_FUNCTION(DoubleUp){
   long paramValue = 0;
   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &paramValue) == FAILURE) {
       RETURN_STRING("Bad parameters!", true);
   }
   paramValue *= 2;
   RETURN_LONG(paramValue);
}

しかし、次のようなエラーが発生しました。

 1>php_myclass.cpp(16): error C2065: 'ZEND_DEBUG' : undeclared identifier
 1>
 1>Build FAILED. 

Windows 7 環境で PHP 拡張機能を作成するのを手伝ってください。

4

1 に答える 1

0

ZEND_DEBUG=0プロジェクトで定義するか、使用しているものに応じてプロジェクトのプロパティを定義します。または、stdafx.h で設定します。

#ifndef ZEND_DEBUG
#define ZEND_DEBUG 0
#endif

そして、ビジュアルスタジオを使用している場合

#ifdef _DEBUG
#define ZEND_DEBUG 1
#else
#define ZEND_DEBUG 0
#endif

したがって、デバッグ モードでビルドすると、zend デバッグ コードが組み込まれ、リリースでビルドすると、すべての zend デバッグ コードが削除されます。

注意:プロジェクトでZTS=1,ZEND_WIN32も定義されていることを確認してください。PHP_WIN32

このガイドに従って、ビジュアル スタジオビジュアル スタジオ ビルド ガイドを使用して php 拡張機能をビルドするための正しい環境をセットアップしてください。VC2005用ですが、ほぼ同じプロセスです。

于 2013-08-07T07:03:32.463 に答える