2009-08-04 36 views
2

PHPのカスタムCOM DLLから関数Size()を呼び出そうとしています。この関数は、私はPHPからその関数を呼び出すときしかし、私は次のエラーを取得する(右、上、左、下)4人のメンバーと構造体を返す必要があります:PHP COM関数が返すstruct [0x80070057]エラーを返します。パラメータが正しくありません

Error [0x80070057] The parameter is incorrect.

私はそれを任意のパラメータを渡さないとに従って仕様は何もパラメータを取得する必要はありませんが、構造体を返します。

同じCOM DLLから他のCOM関数を正常に呼び出すことができます。

私はPHPからcom_print_typeinfo()を呼び出す場合、私はPHPは次のよ​​うに関数が定義されていると考えていることがわかります。

function Size() { } /* DISPID=3 */ 

私はVS 2005でのTLBファイルを開くと、それは

Function Size() As TBoxRect 

としてそれを示していますそして、それはTBoxRectがそれがすべきであるように4メンバーを持つ構造であることを示しています。

PHPは、関数が何も返さないと思っています。これは正しくありません。 COMを使用してPHPから構造体を返す必要があるこの関数を作成するにはどうすればよいですか?

答えて

2

PHPはOLEオートメーション互換型のみを表現できます。 "COM"は間違っている(私の悪い)、それは本当に "OLEオートメーション"拡張です。

あなたのTBoxRectはIDispatchまたはVariant表現を持たないC構造体なので、PHPはその型をマップできません。

TBoxRectの代わりに使用するIDispatchを実装するラッパータイプを作成すると、より多くの運があります。

COM DLLの作成者でない場合は、そのプロキシラッパーをTBoxRectにアクセスし、PHPがアクセスできる形式で返す(ラッパーオブジェクトまたはラッパー配列を作成するそれぞれの値について)。その後、PHPにラッパーオブジェクトのインスタンスを作成させ、設定する必要があります。

+0

COM DLLの作成者はIDispatchを実装したラッパーを作成しましたが、現在はPHPから正しく機能しています。答えてくれてありがとう。 – Robbie

関連する問題