【问题标题】:How can I read data from COM object (an activex server) in MATLAB?如何在 MATLAB 中从 COM 对象(activex 服务器)读取数据?
【发布时间】:2012-08-04 15:24:34
【问题描述】:

我正在尝试将模拟器连接到 MATLAB。模拟器程序公开了一个 COM 对象接口。

我已通过以下命令连接到 COM 对象,并且可以执行其中的大部分方法:

h=actxserver(ProgID)

但它的某些方法需要传递 Variant* 类型作为输出。

这是“invoke”方法指示的方法之一的签名:

ReadOutputImage=Variant(Pointer) ReadOutputImage(handle, int32, int32, `ImageDataTypeConstants, Variant(Pointer))`

我已经用几种语法调用了这个方法,但它们都不起作用:

a=uint8([0])   %means unsigned integer array with 1 member

h.ReadOutputImage(0,1,2,a)  % 0 ,1 ,2 are contants pointing to the position, number of elements to read and size of elemnts while 2 shows Byte element (VT_UI2 COM type).

我尝试过但没有结果的其他语法是:使用uint16uint32int8int16int32 用于以下所有内容:

logical types (like a=[false]), 
cell arrays (like a={uint8([0])} )
empty cell array {}
empty array []
empty sring ''

我也使用过 libpointer:

a=libpointer;
also a=libpointer('uint8Ptr',0)
also a=libpointer('bool',false)
also a=libpointer('bool',[0])

问题是我不确定以下项目:

  1. MATLAB 中“Variant(Pointer)”的类似类型是什么?
  2. 在 MATLAB 中将变量作为输出传递给 COM 方法的方法是什么?
  3. 是否可以从 COM 对象方法结果中获取值作为 MATLAB 中的指针?

为了查看数据在其他客户端中的显示方式,我已经将相同的 dll 文件导入到 Delphi 中,上述方法的类型库的签名是这样的:

procedure ReadOutputImage(StartIndex: Integer; ElementsToRead: Integer; 
                          DataType: ImageDataTypeConstants; var pData: OleVariant);

是的,西门子已为此 com 服务器 (prosim) 提供了指南,并且基于此类文档,我已连接并执行了其大部分方法。但是读取 I/O 数据的方法不起作用。在文档中,方法签名指定如下:(在 VB 中)

STDMETHOD(CS7Prosim::ReadOutputImage)(long startindex,long elementstoread, imagedatatypeconstants DtaType, VARIANT* pData)

你的应用程序怎么样,它工作了吗?它是否包含变体指针作为返回参数?你在那个应用程序中有类似的方法吗?

谢谢

【问题讨论】:

  • 您是否有任何文档可以指向您尝试与之交互的 sim?我在 Matlab 中使用此类功能的唯一经验是使用名为 Imaris 的共焦成像程序,他们提供了一些很好的信息,说明一旦您建立 COM 对象后如何与他们的程序进行交互,看起来您可以做到。
  • 是的,西门子已经为这个 com 服务器 (prosim) 提供了一个指南,并且基于这些文档,我已经连接并执行了它的大部分方法。但是读取 I/O 数据的方法不起作用。在文档中,方法签名指定如下:(在 VB 中)STDMETHOD(CS7Prosim::ReadOutputImage)(long startindex,long elementstoread, imagedatatypeconstants DtaType, VARIANT* pData) 你的应用程序怎么样,它工作了吗?它是否包含变体指针作为返回参数?你在那个应用程序中有类似的方法吗?谢谢

标签: matlab pointers activex pass-by-reference com-object


【解决方案1】:

我可以帮助您解决问题中的#2。我自己刚刚解决了这个问题。基本上,任何通过引用传递给您在修改后访问的 COM 对象,Matlab 都会作为输出返回。

[var1 a]=thisObject.DB.Execute(queryString,a)

here "这里显示的语法显示了一个由 MATLAB 客户端调用的服务器函数。函数的返回值显示为 retval。函数的输出参数 (out1, out2, ...) 如下:

[retval out1 out2 ...] = handle.functionname(in1, in2, ...);

MATLAB 利用 COM 中的按引用传递功能来实现此功能。请注意,按引用传递是 COM 功能。目前在 MATLAB 中不可用。”

【讨论】:

    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多