古いAPIを使用していて、構造体のポインターを非同期で実行されるアンマネージコードに渡す必要があります。
つまり、構造体ポインターをアンマネージコードに渡した後、アンマネージコードはポインターをコピーして、すぐに戻ります。アンマネージコードは、別のスレッドでバックグラウンドでその構造体にアクセスできます。別のスレッドで実行されるアンマネージコードやスレッド自体を制御することはできません。
固定{}ステートメントは、非同期のアンマネージドピン留め用に設計されていないため、ピン留めには使用できません。
GCHandleは参照のみを固定できるため、GCHandleを使用するには構造体をボックス化する必要があります。私はそれを試しました、そしてそれは働きます。それに関する主な問題は、マネージコードから構造体を更新できないことです。構造体を更新するには、まずボックスを解除し、次に更新してから、もう一度ボックス化する必要がありますが、...おっと...ボックスをもう一度?!?これは、メモリ内の以前のポインタがまだ古い非最新の構造体を指していることを意味し、新しい構造体には別のポインタがあります。これは、新しいポインタをアンマネージコードに渡す必要があることを意味します...場合。
固定{}ステートメントなしで構造体をメモリに固定し、ポインタを変更せずにマネージコードから構造体を更新できるようにするにはどうすればよいですか?
ありがとう。
編集:
考えただけです...構造体を含む親オブジェクトを固定してから、コンテナオブジェクトではなく構造体のポインタを取得する方法はありますか?