После поиска в Google, чтения MSDN и проверки некоторых кодов, я нашел этот метод для передачи управляемого объекта в неуправляемую функцию.
Эти методы показывают, как преобразовать Object ^ в void * и преобразовать void * в Object^.
using namespace System;
using namespace System::Runtime::InteropServices;
void managed_function()
{
Object^ obj = gcnew Object();
// Convert Object^ to void*
GCHandle handle = GCHandle::Alloc(obj);
IntPtr pointer = GCHandle::ToIntPtr(handle);
void* ptr = pointer.ToPointer();
unmanaged_function(ptr);
handle.Free();
}
void unmanaged_function(void* ptr)
{
// Convert void* to Object^
IntPtr pointer(ptr);
GCHandle handle = GCHandle::FromIntPtr(pointer);
Object^ obj = (Object^)handle.Target;
obj->SomeManagedMethods();
}
Примечание: если "unmanaged_function" имеет переменные аргументы, этот метод не будет работать.