I want to get Object^ from pointer address in clr/c++.
The address type is unsigned long long, its a pointer to pointer.
There is Microsoft demo code (full project):
// removed some unnecessary code
// a pointer
void* m_impl;
// get a pointer to SomeClass
void GetClassPointer(){
    SomeClass ^ obj = gcnew SomeClass();
    m_impl = GCHandle::ToIntPtr(GCHandle::Alloc(obj)).ToPointer(); 
}
// do something by pointer
void DoSomething(){
    GCHandle h = GCHandle::FromIntPtr(IntPtr(m_impl));
    SomeClass ^ obj = safe_cast<SomeClass^>(h.Target);
    // do something
    obj->DoSomething();
}
I tried this code:
// Address Type
typedef unsigned long long UINT_PTR;
// a pointer
void * ptr;
// address is a pointer to SomeClass*
void GetClassPointer(UINT_PTR address){
    // I also tried "ptr = (void*)address;"
    ptr = *(void**)address;
}
void DoSomeThing(){
    GCHandle h = GCHandle::FromIntPtr(IntPtr(ptr));
    SomeClass ^ obj = safe_cast<SomeClass^>(h.Target);
    // do something
    obj->DoSomeThing();
}
It is always error in line
GCHandle h = GCHandle::FromIntPtr(IntPtr(ptr));
What is the correct way to get Object^ from pointer address?
 
Aucun commentaire:
Enregistrer un commentaire