-uint32_t mono_gchandle_new (MonoObject *obj, mono_bool pinned);
-uint32_t mono_gchandle_new_weakref (MonoObject *obj, mono_bool track_resurrection);
-MonoObject* mono_gchandle_get_target (uint32_t gchandle);
-void mono_gchandle_free (uint32_t gchandle);
+MONO_API uint32_t mono_gchandle_new (MonoObject *obj, mono_bool pinned);
+MONO_API uint32_t mono_gchandle_new_weakref (MonoObject *obj, mono_bool track_resurrection);
+MONO_API MonoObject* mono_gchandle_get_target (uint32_t gchandle);
+MONO_API void mono_gchandle_free (uint32_t gchandle);
+
+/* Reference queue support
+ *
+ * A reference queue is used to get notifications of when objects are collected.
+ * Call mono_gc_reference_queue_new to create a new queue and pass the callback that
+ * will be invoked when registered objects are collected.
+ * Call mono_gc_reference_queue_add to register a pair of objects and data within a queue.
+ * The callback will be triggered once an object is both unreachable and finalized.
+ */
+
+typedef void (*mono_reference_queue_callback) (void *user_data);
+typedef struct _MonoReferenceQueue MonoReferenceQueue;
+
+MONO_API MonoReferenceQueue* mono_gc_reference_queue_new (mono_reference_queue_callback callback);
+MONO_API void mono_gc_reference_queue_free (MonoReferenceQueue *queue);
+MONO_API mono_bool mono_gc_reference_queue_add (MonoReferenceQueue *queue, MonoObject *obj, void *user_data);
+
+