0

シミュレーターを MATLAB に接続しようとしています。シミュレーター プログラムは、COM オブジェクト インターフェイスを公開します。

次のコマンドで COM オブジェクトに接続し、ほとんどのメソッドを実行できます。

h=actxserver(ProgID)

Variant*ただし、一部のメソッドでは、型を出力として渡す必要があります。

「invoke」メソッドで示されるメソッドの 1 つのシグネチャを次に示します。

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使用uint32int8ます。int16int32

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 に答える