ホームページ >バックエンド開発 >PHPチュートリアル >VC++_PHP チュートリアルを使用して PHP 拡張機能を開発する際の注意事項

VC++_PHP チュートリアルを使用して PHP 拡張機能を開発する際の注意事項

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-13 17:18:58881ブラウズ

1. デフォルトでは、C++ は拡張子として .cpp を使用し、PHP は C で書かれています。したがって、この問題を解決するには、C++ が提供する C 接続を使用して、指定されたシンボル extern "C" を交換する必要があります。ステートメントには次のものが含まれている必要があります:
extern "C" {
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
... // 他の C ヘッダー ファイル
}
および
extern "C" {
#ifdef COMPILE_DL_MYEXT
ZEND_GET_MODULE(myext)
#endif
}
2. STL テンプレート定義を C 接続交換指定子に含めることはできず、PHP は math.h ヘッダーを使用する必要があります。したがって、コンパイル中にエラー メッセージ math.h(514) error c2894: templates can bedeclared to have 'C' linkage が生成されます。この問題を解決するには、ヘッダーに extern "C" リンカーを追加する必要があります。 CPP ファイルの前に次のコードを追加します:
#ifdef WIN32
#include
#endif
3. C と同様に、すべての関数プロトタイプをヘッダー ファイル (例: php_myext.h) で宣言する必要があります。ヘッダー ファイルが使用されない場合は、ヘッダー ファイルを使用する必要があります。 すべての関数プロトタイプは、CPP ファイルの zend 関数構造体 (ext.cpp など) の間、つまり次のコードの前に宣言されます。
function_entry myext_functions[] = {
PHP_FE( confirm_myext_compiled, NULL) /* テストのため、後で削除します */
{NULL, NULL, NULL}
};

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/589781.html技術記事 1. デフォルトでは、C++ は拡張子として .cpp を使用し、PHP は C で書かれています。 したがって、この問題を解決するには、C++ が提供する C 接続を使用して、指定されたシンボル extern "C" を交換する必要があります。 ..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。