public Direct3DDevice9Ex CreateDeviceEx(uint Adapter, int DeviceType, IntPtr hFocusWindow, int BehaviorFlags,
                                                NativeStructs.D3DPRESENT_PARAMETERS pPresentationParameters, NativeStructs.D3DDISPLAYMODEEX pFullscreenDisplayMode)
        {
            ComInterface.IDirect3DDevice9Ex obj = null;
            int result = this.createDeviceEx(this.comObject, Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, pFullscreenDisplayMode, out obj);

            Marshal.ThrowExceptionForHR(result);

            return(new Direct3DDevice9Ex(obj));
        }
        private static Interop.Direct3DDevice9Ex CreateDevice(IntPtr handle)
        {
            const int D3D_SDK_VERSION = 32;

            using (var d3d9 = Interop.Direct3D9Ex.Create(D3D_SDK_VERSION))
            {
                var present = new Interop.NativeStructs.D3DPRESENT_PARAMETERS();
                present.Windowed             = 1;                           // TRUE
                present.SwapEffect           = 1;                           // D3DSWAPEFFECT_DISCARD
                present.hDeviceWindow        = handle;
                present.PresentationInterval = unchecked ((int)0x80000000); // D3DPRESENT_INTERVAL_IMMEDIATE;

                return(d3d9.CreateDeviceEx(
                           0,  // D3DADAPTER_DEFAULT
                           1,  // D3DDEVTYPE_HAL
                           handle,
                           70, // D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED | D3DCREATE_FPU_PRESERVE
                           present,
                           null));
            }
        }