3
CLRタイプをFoo^
と正しく変換して、後でvoid*
に変換するにはどうしたらいいですか?シナリオがあるCLRタイプをvoid *にキャストして戻す
、私はHandler
の_obj
フィールドでCLRオブジェクトを保存したい
class Handler {
void* _obj;
void (*_call)(void* obj, int detail);
void handle_event() { _call(_obj, 1234); }
public:
void set_object(void* obj) { _obj = obj; }
void set_callback(void(*callback)(void*,int)) { _call = callback; }
};
ように要約することができるDLL内のいくつかのアンマネージコードを持っています。 GCがCLRオブジェクトを移動する可能性があることを考慮して、実装する方法は? (
pin_ptr
?
gcroot
?)
static void event_callback(void* obj, int detail) {
Foo^ clr_obj = undo_magic(obj);
// ^^^^^^^^^^ how?
clr_obj->DoStuff(detail);
}
public ref class Foo {
Handle* h;
public:
void Start() {
h = new Handler;
void* obj = do_magic(this);
// ^^^^^^^^ how?
h->set_object(obj);
h->set_callback(event_callback);
}
...
}