C#, C♯, C#相談室 Part77
■ このスレッドは過去ログ倉庫に格納されています
0450デフォルトの名無しさん
2012/11/30(金) 13:07:57.58class MustInherit { public: virtual void DoExec() = 0; };
// C++/CLI
public ref class Proxy abstract {
public:
virtual void DoExec() = 0;
static IntPtr CreateInstance(Proxy^ proxy) {
return IntPtr((void*)new Inherited(proxy));
}
static void DeleteInstance(IntPtr proxy) {
delete (Inherited*)proxy.ToPointer();
}
};
#include <vcclr.h>
class Inherited : public MustInherit {
gcroot<Proxy^> m_proxy;
public:
Inherited(Proxy^ proxy) : m_proxy(proxy) { }
virtual void DoExec() { this->m_proxy->DoExec(); }
};
// C#
public class Overrider : Proxy {
public override void DoExec() { Console.WriteLine("exec"); }
}
[DllImport("sample.dll")]
static extern void CallbcakTest(IntPtr mustInherit);
void Test() {
var overrider = new Overrider();
IntPtr callback = Proxy.CreateInstance(overrider);
CallbackTest(callback);
Proxy.DeleteInstance(callback);
}
■ このスレッドは過去ログ倉庫に格納されています