0

Visual Studio Express を使用して、Windows 用の PHP 拡張機能を作成しようとしています。私はゼロから拡張機能を開始し、test.cppコードを書いたファイルだけを持っていました。コードはコンパイルされてうまく機能しましたが、コンパイル中にいくつかの警告が生成されました。

これらの警告を再現するために、ファイルを 1 行に減らしました。

#include "php.h"

このような空の DLL をビルドすると、次のようになります。

>Compiling...
>test.cpp
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(620) : warning C4273: 'getwchar' : inconsistent dll linkage
>        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(435) : see previous definition of 'getwchar'
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(622) : warning C4273: 'putwchar' : inconsistent dll linkage
>        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(437) : see previous definition of 'putwchar'

これら 2 つの警告を修正する適切な方法は何ですか?

この問題を調査しようとしましたが、プリプロセッサ ディレクティブを忘れていないかどうかを確認しました。しかし、それに適切に影響を与えるために適用できるものは見つかりませんでしたstdio.h

プロジェクト構成で設定された、私のプリプロセッサ ディレクティブのリストを次に示します。

WIN32
NDEBUG
_WINDOWS
_USRDLL
TEST_EXPORTS
PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0

Inherited values:
_WINDLL
_UNICODE
UNICODE

他の PHP プロジェクトと同じように見えます。も調べましたstdio.hが、設定する適切なプリプロセッサ ディレクティブが見つかりませんでした。

したがって、主な質問はより小さな質問に分割されます。

  1. PHP 作成者の意図は何ですか?それら getwchar()putwchar()関数をインラインでインポートまたは宣言する必要がありますか? stdio.hそれを同時にしようとします。
  2. 設定するプリプロセッサ ディレクティブを見逃していませんか?
  3. PHP ソースからいくつかの win32 固有のヘッダー ファイルを含める必要がありますか?
4

2 に答える 2

-1

最終的に私は問題を見つけることができました-それは.cpp拡張子であり、PHPはプレーンCで書かれているのに、ファイルはC++としてコンパイルされました。

最も簡単な解決策は、ファイルの名前を.c拡張子に変更することです。そしてもちろん、ソースをCで記述します。

于 2013-02-03T18:32:36.497 に答える