2009-08-04 58 views
2

我试图从PHP的自定义COM DLL调用函数Size()。这个函数返回一个结构与4名成员(上,左,下,右),但是当我调用该函数从PHP我得到以下错误:PHP COM函数返回结构给出错误[0x80070057]参数不正确

Error [0x80070057] The parameter is incorrect.

我不传递任何参数,并根据该规范不应该得到任何参数,而是返回一个结构体。

我能够从同一个COM DLL中成功调用其他COM函数。

如果我打电话com_print_typeinfo()从PHP我可以看到,PHP认为该函数的定义如下:

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

如果我在VS 2005中打开了TLB文件,它显示了它作为

Function Size() As TBoxRect 

它表明TBoxRect是一个有4个成员的结构。

所以PHP似乎认为该函数返回任何不正确的东西。我怎样才能让这个函数返回一个PHP使用COM的结构工作?

回答

2

PHP只能表达OLE自动化兼容类型; “COM”是一个误称(我的不好),它实际上是一个“OLE自动化”扩展。

您的TBoxRect是C结构类型,没有IDispatch或Variant表示,所以PHP无法映射该类型。

如果你制作一个包装类型来实现IDispatch来代替TBoxRect,你会有更多的运气。

如果您不是该COM DLL的作者,那么您可以使用另一种可以访问TBoxRect并以PHP可以访问的形式返回的代码包装器(可以创建包装器对象或包装器数组对于每个值)。然后你会让PHP创建一个包装器对象的实例,你应该被设置。

+0

COM DLL的作者已经制作了一个实现IDispatch的包装,现在它可以从PHP正常工作。谢谢你的答案。 – Robbie 2009-08-13 10:43:57