com - 当调用 COM/ActiveX 方法时,NULL 的 Matlab 等价物是什么?

标签 com matlab parameters automation null

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

他们问过他们如何在 Matlab 中做到这一点 - 我一直在搜索 Mathworks' COM/ActiveX documentation一天左右,现在想不通。

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

function do_something()
   OurAppInstance = actxserver('Foo.Application');
   OurAppInstance.Method('Hello', NULL)
end

NULL 在另一种语言中,我们会写成 NULLnilNothing,或者,当然是传入一个对象。问题是这是可选的(在大多数情况下,这些都是作为可选参数实现的,但不是所有)——这些方法期望经常得到 NULL。

他们告诉我他们已经尝试了 [](从我的阅读来看这似乎是最有可能的)以及 ''Nothing'Nothing'NoneNull0。我不知道其中有多少甚至是有效的 Matlab 关键字 - 在这种情况下肯定没有用。

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

更新:感谢您到目前为止的所有回复!不幸的是,所有答案似乎都不起作用,甚至 libpointer 也不行。在所有情况下错误都是相同的:

错误:类型不匹配,参数 2

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

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

有问题的 coclass 实现了从 IDispatch 继承的单个接口(interface)。

最佳答案

在与 Matlab 技术支持交谈后,我在这里回答了我自己的问题:没有 Nothing 的等价物,Matlab 不支持这个。

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

Matlab 支持人员使用他们创建的 COM DLL 和 Excel 为我提供了一个解决方法,以创建一个可以在脚本中传递的虚拟对象。我还没有设法让这个解决方法/黑客工作,即使不幸的是我也可能无法重新分发它。但是,如果您遇到同样的问题,此描述至少可以为您提供一个起点!

编辑

有可能this Old New Thing blog post 可能相关。 (我不再通过访问有问题的源代码或访问 Matlab 来刷新我的内存或进行测试。)

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

这都是猜测,因为这段代码及其错综复杂的细节在我看来已经过去好几年了。不过,我希望它能对 future 的读者有所帮助。

关于com - 当调用 COM/ActiveX 方法时,NULL 的 Matlab 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2278376/

相关文章:

.net-3.5 - 我应该在 WF 中使用状态机还是序列工作流程?

class - 多参数构造函数的回调

matlab - 在Matlab中将音频文件作为矩阵访问

java - 在java中修改函数内部参数的干净方法是什么?

linux shell脚本大小写参数输入

c# - CoCreateInstance 异常。在静态库上使用 REGSVR32 进行类注册?

c++ - 无需注册 DLL 即可解决 C4772 错误的任何方法?

c# - 很奇怪——线程在读取 `dynamic` COM 对象的简单属性时挂起

python - python中matlab的ddencmp和wdencmp函数有哪些等价物

python - 从 Matlab 到 Python 代码 [z,index]=sort(abs(z));