Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 调用COM / ActiveX方法时,Matlab与NULL等效吗?

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

他们问他们如何在Matlab中执行此操作-我一直在搜索Mathworks的COM / ActiveX文档已有一天左右的时间, 无法解决

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

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

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

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

更新:感谢到目前为止的所有答复!不幸的是,似乎没有答案,甚至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继承的接口。



回答:

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

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

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

编辑

这则Old New Thing博客文章 可能相关。 (我不再使用访问有问题的源代码或访问Matlab来刷新内存或进行测试。)

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

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



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:09


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