В общем хочу написать свои реализации методов динпута. Но при создании объекта, непонятно каким образом вызывается CorExitProcess. Код (Text): class xDirectInputA : public IDirectInputA { public: xDirectInputA(IDirectInputA* di) : m_di(di) { } HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObj) { return m_di->QueryInterface(riid, ppvObj); } ULONG STDMETHODCALLTYPE AddRef() { return m_di->AddRef(); } ULONG STDMETHODCALLTYPE Release() { ULONG count = m_di->Release(); if(0 == count) delete this; return count; } STDMETHOD(CreateDevice)(REFGUID rguid, IDirectInputDeviceA** device, LPUNKNOWN unknown) { HRESULT hr = m_di->CreateDevice(rguid, device, unknown); return hr; } STDMETHOD(EnumDevices)(DWORD devType,LPDIENUMDEVICESCALLBACKA callback, LPVOID ref, DWORD flags) { return m_di->EnumDevices(devType, callback, ref, flags); } STDMETHOD(GetDeviceStatus)(REFGUID rguid) { return m_di->GetDeviceStatus(rguid); } STDMETHOD(RunControlPanel)(HWND owner, DWORD flags) { return m_di->RunControlPanel(owner, flags); } STDMETHOD(Initialize)(HINSTANCE instance, DWORD version) { return m_di->Initialize(instance, version); } private: IDirectInputA* m_di; }; ................. xDirectInputA xDI = new xDirectInputA((IDirectInputA*)(*ppDI)); как так?
я отладчиком не смог понять, там куча непонятных коллов, ооп же. В самом конце, без всяких условий, вызывается CorExitProcess. И все это внутри Код (Text): xDirectInputA xDI = new xDirectInputA();
Кое что разобрал. Вызывается просто ExitProcess, но перед этим идет сравнение по какому-то статическому адресу с нулем, и на этом все срывается. Был бы адрес, передаваемый в функцию - было бы яснее.
Приведите код целиком, у меня данный кусок работает нормально. Скорее всего проблема в передаваемом параметре. И ещё, зачем xDirectInputA xDI = new, а не xDirectInputA *pxDI = new?
Код (Text): HRESULT WINAPI xDirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, IDirectInputA** ppDI, LPUNKNOWN punkOuter) { HRESULT hr = _DirectInputCreateA(hinst, dwVersion, ppDI, punkOuter); xDirectInputA xDI = new xDirectInputA((IDirectInputA*)(*ppDI)); return hr; }