///////////////////////////////////////////////////////////////////////////////////////////// //// Force Feedback (FFB) // Register CB function that takes a C# object as userdata public void FfbRegisterGenCB(FfbCbFunc cb, object data) { // Free existing GCHandle (if exists) if (hFfbUserData.IsAllocated && hFfbUserData.Target != null) { hFfbUserData.Free(); } // Convert object to pointer hFfbUserData = GCHandle.Alloc(data); // Apply the user-defined CB function UserFfbCB = new FfbCbFunc(cb); wf = new WrapFfbCbFunc(WrapperFfbCB); _FfbRegisterGenCB(wf, (IntPtr)hFfbUserData); }
// Register CB function that takes a pointer as userdata public void FfbRegisterGenCB(WrapFfbCbFunc cb, IntPtr data) { wf = new WrapFfbCbFunc(cb); _FfbRegisterGenCB(wf, data); }
private extern static void _FfbRegisterGenCB(WrapFfbCbFunc cb, IntPtr data);
///////////////////////////////////////////////////////////////////////////////////////////// //// Force Feedback (FFB) // Register CB function that takes a C# object as userdata public void FfbRegisterGenCB(FfbCbFunc cb, object data) { // Free existing GCHandle (if exists) if (hFfbUserData.IsAllocated && hFfbUserData.Target != null) hFfbUserData.Free(); // Convert object to pointer hFfbUserData = GCHandle.Alloc(data); // Apply the user-defined CB function UserFfbCB = new FfbCbFunc(cb); wf = new WrapFfbCbFunc(WrapperFfbCB); _FfbRegisterGenCB(wf, (IntPtr)hFfbUserData); }