我正在尝试将模拟器连接到 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])
问题是我不确定以下项目:
- MATLAB 中类似的“Variant(Pointer)”类型是什么?
- 将变量作为输出传递给 MATLAB 中的 COM 方法的方法是什么?
- 甚至可以从 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)
你的应用程序怎么样,它有效吗?它是否包含变体指针作为返回参数?你在那个应用程序中有类似的方法吗?
谢谢