最近、VisualStudioのウィザードを公開しました。このウィザードを使用すると、マウスを数回クリックするだけで拡張機能を作成できます。 ここで、最初の2つの拡張機能「Hello world」と「exeからアイコンをプル」を作成します。
私は記事を非常に遅らせたことをすぐに謝りますが、人生の状況は私にこれをすることを強制しましたが、それらは非常に敬意を表しています。
それでは始めましょう。1. VS 2008の「ウィザード」をダウンロードします。トピック
VSウィザードからのリンク
:PHP拡張それをインストールしてください、それは自動的に起こります。
2.アセンブリに必要なファイルをダウンロードします。PHPソースとバイナリのみが必要です。
両方のファイルの5.2.11バージョンをダウンロードしますphp-5.2.11-Win32.zipをC:\ PHPDEV \ php-5.2.11-Win32およびphp-5.2.11.tar.bz2にC:\ PHPDEV \ php-5.2.11。に解凍します。
3. VSを実行し、新しいプロジェクトを作成します。そしてその名前を入力します。 パスを設定する必要はありません;)
その後、スタジオのメインウィンドウ、ファイルの内容を確認します。
4.関数を作成します。既に述べたように、スケルトンは完全に作成され、関数を作成して登録するだけです。
プロジェクトにはテスト機能があり、コメント解除します。
参照用:
1)関数ヘッダーはhファイルにある必要があります。 PHP_FUNCTION(function_name)の形式。
2)定義-cファイル内。
3)関数は、cファイルのfunction_entry test_functionsに登録する必要があります。 PHP_FEの形式(function_name、NULL)。
関数自体の書き方については、後で説明します。 それまでは、これに限定します。
PHP_FUNCTION(hello_world){
RETURN_STRING(「Hello World」、1);
}
5.ビルドして実行します。リリースで収集します。 集まった。
ディレクトリC:\ PHPDEV \ testを作成します
そこのディレクトリからphp.exeとphp5ts.dllをコピーします。
test.dllという名前でアセンブルされたdllをコピーします。
php.iniを作成します。
extension_dir = .
extension = test.dll
行<?= Hello_world()?>でtest.phpを作成し、コンソールで実行します。
6.高度な機能の作成。関数から値を取得して渡す方法を理解しましょう。
難点は、関数がさまざまなタイプのさまざまな値を受け入れて返すことです。
文字列と整数が受信され、文字列が返される例を考えてみましょう。
PHP_FUNCTION(foo){
char *入力;
int inputLength;
長いマルティ;
char *結果;
if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC、 "sl"、&input、&inputLength、&multy)){
帰る
}
result =(char *)emalloc(strlen(入力)+ sizeof(long)+ 3);
sprintf(結果、「%s、%ld」、入力、マルチ);
RETURN_STRING(結果、1);
}
ご覧のとおり、ここでは次の構成が使用されています。
zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC、format_string、received_valuesのaddresss_)
RETURN_ *;
2つのテーブルを検討してください。最初のテーブルは、受け入れられているPHPタイプと、対応するフォーマットおよびタイプCを示しています
2番目では、値を対応する構成体とともに返します。
自分に迷惑をかけないように、私は本からテーブルの写真を同封しています。
もう一度、上記の例を見て、それがいかに簡単かを理解します。
ところで、メモリ割り当てはc関数の電子アナログ(emalloc、efree、erealloc)によって実行されるという事実に注意を喚起したいと思います。これは、GC PHPがそれ自体を「片付ける」ことができるために必要です。
7.便利な例。 exeからアイコンを引き出します。もちろん、これもPHPで作成できますが、さらに作業が必要になります。 そして、ここにはすでに必要な見出しがあります。
Cでコードを書きましょう(blodede odeptを書きました):
pe.hファイル
では、Windowsライブラリのコードが使用されています。それらは役に立ちますが、直接接続することはできません。クロスプラットフォームの拡張機能を作成していますか? ;)
pe.cにコードを書きます。 明らかなように、関数void _extract_ico(char * filename、char * filenameOut)をラップします。
PHP_FUNCTION(extract_ico){
char * filename;
char * filenameOut;
int len1、len2;
if(zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC、 "ss"、&filename、&len1、&filenameOut、&len2)){
帰る
}
_extract_ico(ファイル名、filenameOut);
RETURN_NULL();
}
複雑なことは何もありません。 シンプルで明確。 結果ファイルは
php_ico.cおよび
php_ico.hです。
8.ボーナス:* nixの下でビルドボーナスはconfig.m4ファイルが利用できることです。そのため、アセンブリの場合は、次の一連のコマンドを実行するだけです。
phpize
./configure
作る
当然、システムには適切なパッケージが必要です。
ubuntu 9.10サーバーの場合、これは次のように行われます。
sudo apt-get install build-essential php5 php5-dev
収集されたso-libraryを取得し、拡張機能で規定します。 できた
はい、* nixはWebプログラマーにとってはるかに便利です。私の友人の間では、Windowsに少数がいます。 多くはubuntuまたはポピーを好む=)
9.文学と役に立つリンク。1)ジョージシュロスナグル。 プロのPHPプログラミング。
books.ruで購入できます。ここでは、人気のあるIMHOストアの中で一番安いです。 私をサポートしたい場合は、
このリンクをクリックし
てください =)
2)
拡張機能の作成パートI:PHPとZendの概要3)
PHP:内部:windows [PHP Wiki]PSそして次回は、PHPをC / C ++アプリケーションに埋め込む方法を説明します。 しかし、「先日」になるとは約束しません。