【解決方法】Ccmdtarget() アサーションの失敗


in my application need some scanner support ,I thought it is a good idea to get into TWAIN and try it out.after that I had an exit error that is driving me nuts as an Debug Assertion Failed....
in cmdtarg.cpp line 40 CCmdTarget::~CCmdTarget because m_dwRef is greater than 1 (in this case it is 2)

私が試したこと:

CCmdTarget::~CCmdTarget()
{
	if (m_xDispatch.m_vtbl != 0)
		((COleDispatchImpl*)&m_xDispatch)->Disconnect();
	ASSERT(m_dwRef <= 1);
	m_pModuleState = NULL;
}

//エラーメッセージ

'ScannerApp.exe' (Win32): Unloaded 'C:\Windows\twain_32.dll'
Debug Assertion Failed!

Program: C:\Windows\SYSTEM32\mfc140d.dll
File: d:\a01\_work\11\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\cmdtarg.cpp
Line: 40

解決策 1

投稿するのに十分なコードが投稿されていないため、回答がありません。 サンプル コードをチェックして、何か見落としがないか、単に間違ったことをしていないかを確認することをお勧めします。 ここに私が見つけたいくつかのサンプルがあります.2つはここにあります:
TWAIN の C++ ラッパー[^]
TWAINを利用したコピーユーティリティ[^]
TWAIN サンプル データ ソースとアプリケーション[^]

うまくいけば、それらの1つがあなたを助けることができます.

解決策 2

を見てみましょう ~CCmdTarget で m_dwRef アサート[^]

なんらかの理由で、コードのどこかでオブジェクトが解放されていないようです。
m_dwRef が 1 より大きいため – Google 検索[^]

解決策 3

に関するアサーション

ASSERT(m_dwRef <= 1);

1 つのことを意味します: オブジェクトが破棄される前に Release() を呼び出すのを忘れていました

解決策 4

1 つのプロジェクトに異なるバージョンの MFC を組み合わせると、同様の問題が発生する可能性があるというヒントがあります。
~CCmdTarget で m_dwRef アサート[^]

コメント

タイトルとURLをコピーしました