什么是Matlab相当于NULL,当它调用COM/ActiveX方法时?

Dav*_*vid 14 com parameters null matlab automation

我维护一个可以通过COM自动化的程序.通常客户使用VBS来编写脚本,但我们有几个客户使用Matlab的ActiveX支持,并且在使用NULL参数调用COM对象方法时遇到问题.

他们已经问过他们是如何在Matlab中做到这一点的 - 而且我已经在Mathworks的COM/ActiveX文档中搜索了一天左右,现在无法弄明白.

他们的示例代码可能如下所示:

function do_something()
   OurAppInstance = actxserver('Foo.Application');
   OurAppInstance.Method('Hello', NULL)
end
Run Code Online (Sandbox Code Playgroud)

这里NULL就是另一种语言,我们会写NULLnilNothing或,当然,传中的对象.问题是这是可选的(并且这些在大多数情况下都是作为可选参数实现的,但并非所有情况都是如此) - 这些方法经常会出现NULL.

他们告诉我,他们已经尝试过[](从我的阅读似乎是最有可能的),以及'',Nothing,'Nothing',None,Null,和0.我不知道有多少甚至是有效的Matlab关键字 - 在这种情况下肯定都不起作用.

有人可以帮忙吗?什么是Matlab的空指针/对象的语法用作COM方法参数?

更新:感谢您到目前为止的所有回复!不幸的是,没有一个答案似乎有效,甚至没有libpointer.在所有情况下错误都是相同的:

Error: Type mismatch, argument 2

COM类型库中的此参数在RIDL中描述为:

    HRESULT _stdcall OurMethod([in] BSTR strParamOne, [in, optional] OurCoClass* oParamTwo, [out, retval] VARIANT_BOOL* bResult);
Run Code Online (Sandbox Code Playgroud)

有问题的coclass实现了从IDispatch下降的单个接口.

Dav*_*vid 9

在与Matlab技术支持人员交谈后,我在这里回答了我自己的问题:没有相应的Nothing,Matlab不支持这一点.

详细说明:Matlab确实支持可选参数,但不支持传入变量NULL指针(实际上,为了完全遵循VB的Nothing工作方式VT_EMPTY,我认为是一种变体)是否作为可选参数.有关于某些null/pointerish类型的文档,我的问题或各种答案中提到了很多这些类型,但这些似乎不适用于它们的COM支持.

我通过Matlab支持使用他们创建的COM DLL和Excel来创建一个可以在脚本中传递的虚拟对象.我没有设法让这个解决方法/黑客工作,即使我不幸的是我可能无法重新分发它.但是,如果遇到同样的问题,这个描述可能至少会给你一个起点!

编辑

很可能这个旧的新的博客文章 可能是相关的.(我不再能够访问有问题的源代码,或访问Matlab,刷新内存或进行测试.)

简而言之,对于IUnknown(或派生的)参数,您需要[unique]合法的属性NULL.上述声明要求Matlab创建或传递一个VT_EMPTY它无法做到的变体.也许添加[unique]可能会促使Matlab引擎传入NULL指针(或包含NULL指针的变体),而不是 - 假设它能够做到这一点,这就是猜测.

这是所有猜测,因为此代码和它的复杂性在这一点上落后于我几年.但是,我希望它可以帮助任何未来的读者.


Pet*_*ter 5

mathworks 文档中,您可以使用该libpointer函数:

p = libpointer;
Run Code Online (Sandbox Code Playgroud)

然后p将是一个NULL指针。有关更多详细信息,请参阅该页面。

另请参阅:有关 libpointer 的更多信息


Geo*_*sic 5

彼得的答案应该有效,但你可能想要尝试的是NaN,这是Matlab通常用作NULL价值的东西.