7

C#を使用して特定のDLLをP /呼び出しした場合、実際のC ++ DLLは呼び出し中に実行されてからシャットダウンされ、使用されているすべてのメモリが破壊されますか?または、.NETは、管理されていない「ヒープ」でC ++ DLLによって使用されるメモリを管理し、静的関数を呼び出すたびに、それらのオブジェクトへのポインターをC ++ DLLに提供しますか?

特定のC++プロジェクトでメモリを永続化する必要がある場合、ActiveX / COMサーバーを作成してメモリを永続化する必要がありますが、C#から呼び出すことはできますか?

4

2 に答える 2

5

C#を使用して特定のDLLをP /呼び出しした場合、実際のC ++ DLLは呼び出し中に実行されてからシャットダウンされ、使用されているすべてのメモリが破壊されますか?

いいえ。DLLがロードされると、ロードされたままになります。DLLの存続期間は、関数呼び出しに関連付けられていません。これは、静的ストレージを持つDLL内の変数が、最初のp/invoke呼び出しを超えて存続することを意味します。

于 2013-03-24T12:50:33.723 に答える
2

C ++-DLLからオブジェクトを作成している場合、オブジェクトを削除するか、破棄するまで、オブジェクトは実際に存続します。管理されていないオブジェクトを手動で削除する必要があるため、そのまま残ります。

于 2013-03-24T12:51:31.753 に答える