Сбой приложения при создании объекта - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть класс, который наследует от интерфейса IDirectInputA.

здесь: http://pastebin.com/QuHP02ai

, поэтому при попытке создать объект этого приложения происходит сбой (откуда-то вызывается CorExitProcess).Что я сделал не так?

ps Прямой ввод v. 7

pps

этот код создает объект.Я удалил из него какой-то код, кроме основной части

IDirectInputA** ppDI;
HRESULT hr = _DirectInputCreateA(hinst, dwVersion, ppDI, punkOuter);
xDirectInputA xDI = new xDirectInputA((IDirectInputA*)(*ppDI));

Ответы [ 2 ]

0 голосов
/ 09 ноября 2010

ТБХ то, что вы пытаетесь сделать, сложнее, чем вы думаете.Проблема возникает в том, что именно вы пытаетесь сделать.Пытаетесь ли вы обернуть IDirectInputA ИЛИ вы пытаетесь полностью повторно реализовать его.

Если вы пытаетесь обернуть его, сделайте следующее:

IDirectInputA* pDI = NULL;
HRESULT hr = _DirectInputCreateA( hinst, dwVersion, &pDI, NULL );

Затем создайте производный класс следующим образом:

class xDirectInputA : public IDirectInputA
{
protected:
    IDirectInputA* mpInternal;
public:
    xDirectInputA( IDirectInputA* pInternal ) :
         mpInternal( pInternal )

    HRESULT CreateDevice( REFGUID rguid, IDirectInputDevice** ppDirectInputDevice, IUknown* pOuter )
    {
        // Do what ever processing you need.
        return mpInternal->CreateDevice( rguid, ppDirectInputDevice, pOuter );
    }

    // Implement other functions.
};

Теперь вы передаете указатель xDirectInputA вместо обычного указателя, возвращенного из DirectInputCreate.Теперь вы можете перехватывать каждое сообщение, проходящее через класс.

Если вы пытаетесь выполнить собственную полную повторную реализацию, это намного сложнее.Вам нужно полностью реализовать объект COM.Лучше всего поместить DInput.DLL вместе с исполняемым файлом, содержащим вашу реализацию.В общем, это только то, что вы должны попробовать, если ДЕЙСТВИТЕЛЬНО знаете, что делаете.

Если вы хотите полностью изучить COM, я предлагаю приобрести Essential COM от Don Box.Это ОЧЕНЬ полезная книга.

0 голосов
/ 08 ноября 2010

Когда вы создаете свой экземпляр, вы передаете указатель на IDirectInputA, верно?Какой указатель вы передаете?Если вы передадите неинициализированный или нулевой указатель, вы получите неопределенное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...