MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   调用COM / ActiveX方法时,Matlab与NULL等效吗? (https://www.labfans.com/bbs/showthread.php?t=23125)

poster 2019-12-10 20:30

调用COM / ActiveX方法时,Matlab与NULL等效吗?
 
我维护一个可以通过COM自动化的程序。通常,客户使用VBS进行脚本编写,但是我们有一些客户使用[B]Matlab的ActiveX支持[/B] ,并且在[B]使用NULL参数调用COM对象方法时[/B]遇到了麻烦。

他们问他们如何在Matlab中执行此操作-我一直在搜索[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/bq4epvg-1.html"]Mathworks的COM / ActiveX文档[/URL]已有一天左右的时间, [URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/bq4epvg-1.html"]无法解决[/URL] 。

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

function do_something() OurAppInstance = actxserver('Foo.Application'); OurAppInstance.Method('Hello', NULL) end where NULL是另一种语言的位置,我们可以写NULL或nil或Nothing ,当然也可以传入一个对象。问题是这是可选的(在大多数情况下(但[I]不是全部)[/I] ,这些都是作为可选参数实现的)-这些方法希望经常获得NULL。

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

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

[B]更新:[/B]感谢到目前为止的所有答复!不幸的是,似乎没有答案,甚至libpointer也libpointer 。在所有情况下,错误都是相同的:

Error: Type mismatch, argument 2

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

HRESULT _stdcall OurMethod([in] BSTR strParamOne, [in, optional] OurCoClass* oParamTwo, [out, retval] VARIANT_BOOL* bResult); 所讨论的coclass实现了一个从IDispatch继承的接口。



[B]回答:[/B]

在与Matlab技术支持联系之后,我在这里回答我自己的问题: [B]没有Nothing ,Matlab不支持。[/B]

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

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

[B]编辑[/B]

这则[URL="http://blogs.msdn.com/b/oldnewthing/archive/2014/09/19/10559094.aspx"]Old New Thing博客文章[/URL] [I]可能[/I]相关。 (我不再使用访问有问题的源代码或访问Matlab来刷新内存或进行测试。)

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

所有这些都是猜测,因为此时此代码及其复杂性比我落后了几年。但是,希望对以后的读者有所帮助。



[url=https://stackoverflow.com/questions/2278376]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 05:06

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.