C スタイルのコールバックにメンバー関数を使用する場合、GC によって収集または移動されないようにデリゲートを固定する必要がありますか? この件に関するいくつかの投稿を読みましたが、それが必要かどうか、または実装の正しい方法かどうかを判断できませんでした。
public delegate void FeedCallbackDelegate(int type,void* data,void *param);
public ref class CStyleApiWrapper
{
public:
void StartFeed();
private:
FeedCallbackDelegate^ managedFeedCallback;
IntPtr unmanagedFeedCallbackPtr;
void FeedCallback(int code,int type,void* data,void *param);
};
void CStyleApiWrapper::StartFeed()
{
managedFeedCallback = gcnew managedFeedCallback(this, &CStyleApiWrapper::FeedCallback);
unmanagedFeedCallbackPtr = Marshal::GetFunctionPointerForDelegate(managedFeedCallback);
//Start Feed
StartFeed((NOTIFY_FUNC)(void*)unmanagedFeedCallbackPtr,0,NULL);
}
void CStyleApiWrapper::FeedCallback(int type,void* data,void *param)
{
//Process Feed
...
}