C#WPアプリケーションで使用するWP C++ランタイムコンポーネントがあります。 C++ランタイムコンポーネントでC#およびC++/CXオブジェクトはどのように関連していますか?
、Iは、C#アプリケーションで
public interface class ICallback
{
public:
virtual void DoSomething();
};
public ref class WindowsPhoneRuntimeComponent sealed
{
public:
WindowsPhoneRuntimeComponent();
void SetCallback(ICallback ^callback);
IMap<Platform::String^, Platform::Object^>^ CreateDictionary();
};
を持って、私はICallback
を実装 CallbackImp
を有します。それから私は、私は次の質問のオブジェクトを管理している
- CBとCOMを持って
CallbackImp cb = new CallbackImp(); WindowsPhoneRuntimeComponent com = new WindowsPhoneRuntimeComponent(); // Set callback com.SetCallback(cb); // Get dictionary IDictionary<string, object> dict = com.CreateDictionary();
を行います。 C++/CXオブジェクトはどこにありますか?私は を聞いたcbとcomいくつかのC++/CXオブジェクト(ネイティブヒープ上には にあります)を指摘していますか?
- CBとCOMはC++/CXはその後解放 オブジェクトされているか、.NET GCによって解放されている場合は?
- 私はランタイム・コンポーネントにCBを渡し、CBは またはネイティブヒープを管理するために属しているのでしょうか?
- dictはどこですか?誰がそれを解放するでしょうか?
1. 3として、WindowsPhoneRuntimeComponentのコンストラクタは、次に呼び出されたことを隠すため、C++/CXがなければなりませんネイティブヒープのどこかに存在するオブジェクト? また、ランタイムコンポーネントプロジェクトで新規に参照すると、その新しく作成されたオブジェクトのアドレスがわかります。「オブジェクトはサーバーによって所有されています」という意味はどうですか? 2.「あなたのC++/CX参照が範囲外になりますか? "私は個人的には、cbとcomが管理されたヒープにあると考えているので、GCはいつそれらをリリースするかを決めるでしょう。これはC++/CXオブジェクトもリリースされます。 – onmyway133
あなた自身の精神モデルを働くしかしそれは非常に正確なものではありません。 WinRTの種類を理解するためには、COMを理解する必要があります。それと幸運。 –
http://social.msdn.microsoft.com/Forums/windowsapps/en-US/d41b7773-d85e-4d1c-97a1-2c8579da62c2/how-does-memory-allocation-work-with-native-winrt-typesによるとC#またはVBの呼び出し元がGCコレクションを介して投影された.NETオブジェクトを解放するたびに、それらのオブジェクトは自動的に解放されます。参照カウントが0になると、デストラクタ(もしあれば)が呼び出され、メモリは " – onmyway133