C++/CLIポインタをネイティブC++ポインタに変換するこの問題を実行しました。 Heres the background: 私はC++/CLIを使ってWindowsフォームアプリケーションを書いています。アプリケーションは、いくつかのCOMインターフェイスを呼び出します。 COMインターフェイスを介してオブジェクトの(C++/CLRクラスの内側)のインスタンスを作成する場合、私は同様に、CoCreateInstance
の最後の引数として(void**)(&provider)
渡し:C++/CLIポインタからネイティブC++ポインタへの変換
HRESULT CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, (void**)(&provider));
しかし、私は、コンパイラエラーが発生します。 cli::interior_ptr<Type>
からvoid **
に変換できません。 私はこれについてsomの研究を行っており、C++とC++/CLIではさまざまな種類のポインタの問題のようです。誰もがこれについて何か知識を持っていて、それがどうやって修正できるかについてのヒントを教えてくれますか?あらかじめThanx!
まず、すべてのあなたの助けを借りて!
Freichが提案したように、pin_ptr
を使用しようとしましたが、代わりにinterior_ptr
からpin_ptr
に変換する問題についてコンパイラが不平を言っていました。私が代わりのようにinterior_ptr
を使用しようとすると:
pin_ptr<void *> pinnedPtr = &provider;
CoCreateInstance(CLSID_MSPRProvider, NULL, CLSCTX_LOCAL_SERVER, IID_IMSPRProvider, (void**)pinnedPtr);
私はinterior_ptr
からinterior_ptr
に変換することはできません取得します。 interior_ptr
をvoid**
に変換するという問題はすべて解決します。このように:(void**)interiorPtr
、ここでinteriorPtr
はinterior_ptr
です。この中の任意のアイデア?
これは危険です!私は前と同じような状況がありました。固定ポインタを作成してネイティブポインタを返しましたが、関数が終了し固定ポインタが削除されたためオブジェクトが移動されたため、オブジェクトはもはや存在しませんでした固定されていて、ネイティブポインタが無効でした!これはデバッグ中に表示されても、表示されなくてもかまいませんが、期待していないときはリリースバージョンで確実に発生します。 –
@TobiasKnauss 'std :: string :: string(const char *)'コンストラクタは、参照されるデータのコピーを作成するので、関数が終了するときに参照先のメモリが固定されなくなっても問題ありません。 –