2

CでPHP拡張機能を作成しましたが、プログラムのすべての機能を自分のC ++ダイナミックライブラリ(Xcodeでプログラミングします)で提供したいと思います。

私の質問は、php拡張機能(c ++ライブラリのラッパーとして機能します)のc ++ dynlibの関数に対してどのようにリンク(および使用)するかです。C ++ライブラリに対してリンクできるようにするには、config.m4で何を変更する必要がありますか?

4

1 に答える 1

2

C++ ライブラリへの C ラッパー インターフェイスを作成し、そのための PHP 拡張機能を作成します。

C インターフェイスの場合、プライベート メソッドを持つ C++ クラスであっても、クラスを「構造体」として宣言します。とにかく詳細を公開しません。前方宣言のみを使用します。

すべてのパブリック メソッドは、ポインターを受け取るフリー関数を介して公開されます。Create メソッドを使用してインスタンスを作成し、Destroy メソッドを使用してインスタンスを破棄します。

したがって、本質的に「C ライブラリ」とやり取りしていますが、実装は C++ です。

あなたが置くべきであることに注意してください:

#ifdef __cplusplus
extern "C" {
#endif

ヘッダーの上部 (メソッドの前、インクルード ガードの後) および

#ifdef __cplusplus
}
#endif

それらの最後(メソッドの後、インクルードガードの前)

ライブラリ内の C++ 関数を呼び出すことによって実装されるため、実際に C++ コンパイラを使用してラッパー ライブラリをビルドする必要があります。

C ラッパーは、別のライブラリを使用する新しいライブラリにすることも、同じライブラリの一部にすることもできます。

別の方法は、PHP ラッパー マクロを使用することです。これは基本的にバインディングも作成しますが、多くの作業を自動的に行います。見る

http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/

これにより、config.m4ファイルの処理方法も表示されます。

于 2012-04-17T07:42:00.437 に答える