5

次のようにビデオフレームをキャプチャしています

CvCapture *capture = cvCreateFileCapture("PATH");

私はビデオを読んでそれを処理することができます。すべて正常に動作します。しかし、キャプチャをリリースしようとすると

cvReleaseCapture( &capture ); 

私は得る

error C2664: 'cvReleaseCapture' : cannot convert parameter 1 from
 'cli::interior_ptr<Type>' to 'CvCapture **'
          with
          [
              Type=CvCapture *
          ]
          Cannot convert a managed type to an unmanaged type

関数はクラス内にあります。

public ref class Locator

そして、私はそれをメインから呼び出しています

ロケータ r;

* public ref *クラスロケーターに追加する前は、エラーは発生していませんでした。

それを修正するためのアイデアはありますか?c++-cli に切り替える前は問題なく動作していました。

ヒープの問題に関連していると思います.ガベージコレクションの結果、ヒープ上のアイテムを移動できます。ネイティブ メソッド/関数にポインターを送信するには、呼び出しの間ポインターを「固定」する必要がありますが、その方法はわかりません。

ありがとう。

更新しました:

それはそれを修正しました。

pin_ptr<CvCapture*> p;
p = &capture;
cvReleaseCapture( p );  
4

1 に答える 1

12

(修正のための@AlexFarberのおかげで、答えとして追加)

pin_ptr を試しましたか? 何かのようなもの:

pin_ptr<CvCapture*> pCapture = &capture;
于 2012-07-22T17:06:55.253 に答える