[英]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.