0

我正在尝试将模拟器连接到 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).

我尝试过但没有结果的其他语法是:使用uint16, uint32, int8, int16,int32用于以下所有内容:

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)

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

谢谢

4

1 回答 1

0

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

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

请参阅此处 “此处显示的语法显示了 MATLAB 客户端调用的服务器函数。函数的返回值显示为 retval。函数的输出参数(out1, out2, ...)如下:

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

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

于 2012-09-27T15:58:39.067 回答