PHP COM函数返回struct给出错误[0x80070057]参数不正确

时间:2009-08-04 13:07:31

标签: php com

我正在尝试从PHP的自定义COM DLL调用函数Size()。该函数应返回一个包含4个成员(顶部,左侧,底部,右侧)的结构,但是当我从PHP调用该函数时,我收到以下错误:

  

错误[0x80070057]参数为   不正确。

我没有传递任何参数,根据规格它不应该获得任何参数但返回结构。

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

如果我从PHP调用com_print_typeinfo(),我可以看到PHP认为函数定义如下:

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

如果我在VS 2005中打开tlb文件,则将其显示为

Function Size() As TBoxRect

它表明TBoxRect是一个有4个成员的结构,就像它应该的那样。

因此,PHP似乎认为该函数不会返回任何不正确的内容。如何使用COM来生成应该从PHP返回结构体的函数?

1 个答案:

答案 0 :(得分:2)

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

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

如果您创建一个实现IDispatch的包装器类型来代替TBoxRect,那么您将获得更多运气。

如果您不是该COM DLL的作者,那么您可以用另一种语言实现该代理包装器,该语言可以访问TBoxRect并以PHP可以访问的形式返回它(创建包装器对象或包装器数组每个值)。然后,您将使用PHP创建包装器对象的实例,您应该进行设置。