[英]Cache to map IntPtr handles to C# class instances in pinvoke callbacks
我正在使用不透明指針標識資源的本機dll編寫C#包裝器。 一個典型的例子是
typedef struct session session;
typedef struct track track;
void* sessionCreate(int arg, session** sess);
void sessionRelease(session** sess);
track* sessionGetTrack(session* sess, int index);
void trackAddRef(track* trk);
void trackRelease(track* trk);
int trackGetLength(track* trk);
在我的包裝器中,我創建了與不同不透明類型相對應的C#類,並使用與不同不透明類型相對應的各種函數來創建成員函數。
這可以。 也有來自dll的回調,例如
void(* track_changed )(track *trk, bool changedExternally);
為了從處理回調的靜態委托映射到與提供的句柄相對應的對象,我在每個類中使用了WeakReferences的靜態字典(IntPtr / SafeHandle作為鍵,對象引用作為aata)。
那么從靜態字典中刪除條目的正確方法是什么? 我正在編寫庫代碼,不能依靠我的客戶來處置我的對象。 我應該將代碼放入終結器中嗎?
還是有更好的方法來管理靜態回調和我的對象實例之間的對應關系?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.