[英]Application crashes when creating an object
我有一个继承自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));
创建实例时,您将指针传递给IDirectInputA,对吗? 您通过什么指针? 如果传递未初始化或空指针,则将得到未定义的行为。
TBH您正在尝试做的事情比您想象的要复杂。 问题出在您到底想做什么。 您是要包装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,建议您购买Don Box的Essential COM 。 这是非常有帮助的书。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.