-4

VARIANT(mfc)を返す関数getMemory()があります。ulValのメンバーは、アクセスする必要のあるメモリへのポインタであると言われています。

int m_memAddr = object.getMemory().ulVal; //get pointer to memory

次に、このポインタをchar*に入れる必要があります。

char* pointer = (char*)m_memAddr;

コンパイルしますが、プログラムの実行時にエラーが発生します。それをデバッグする方法は?

関数getMemory:

VARIANT object::getMemory()
{
    VARIANT result;
    InvokeHelper(0x4a, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
    return result;
}

//私が使用するカメラライブラリのドキュメントから編集:

VARIANT GetImageMem()説明

GetImageMem()は、画像が保存されている内部画像メモリの開始アドレスへのポインタを返します。リングバッファリングを使用する場合、GetImageMem()は、画像キャプチャに最後に使用された画像メモリの開始アドレスを返します。

画像メモリへのポインタは、VARIANTデータ型の要素ulValに返されます。パラメーター

戻り値

VARIANTデータ型のulVal内の画像メモリへのポインタ。

これは私のカメラが画像を保存する場所にメモリを返す関数の説明です。

この画像をOpenCVで処理したいので、IplImageimageDataとして設定するにはchar*が必要です。

今、私はそれが何が問題なのかがより明確になることを願っています。

4

1 に答える 1

1

ドキュメントから

pbParamInfo-pbParamInfoに続くパラメーターのタイプを指定するnullで終了するバイト文字列へのポインター。

...-pbParamInfoで指定されたタイプのパラメーターの変数リスト。

にNULLを渡してpbParamInfoいます。これは、返されたバリアントにデータが格納されないことを意味しているため、もちろんポインターは無効です。

さらにドキュメントに従うと、passingVTS_BSTRは、バリアントをcharへのポインタで初期化できることを指定していることがわかります(pbParamInfoの次の引数としてそれを渡します)。

于 2012-04-27T14:16:56.343 に答える