2

QtWebKit関数を別のスレッドで使用している「Dispatcher」と呼ばれるQObject継承クラスを実行しようとしています。
次に、メインの GUI スレッドですが、オブジェクトを初期化すると、次のようになります。

First-chance exception at 0x74f2c41f infoo .exe: 0x000006A6: The binding handle is invalid

オブジェクトのシグナルとスロットは機能しません。それらは true を返しますが、呼び出されません。私が見るエラーに何らかの関連があると思います。インターネットによると、次のように新しいスレッドを開始する必要があります:

CollectorWorker* pCollectorWorker = new CollectorWorker(pUrlStack,m_pSettings);
pCollectorWorker->moveToThread( QApplication::instance()->thread());
QCoreApplication::postEvent(pCollectorWorker, new QEvent( QEvent::User ) );

CollectorWorker は、Dispatcher クラスを開始する別のスレッド オブジェクトです。Dispatcher クラスを初期化すると、このエラーが発生します。

CollectorWorker.cpp

bool CollectorWorker::event( QEvent *ev )
{   
    if( ev->type() == QEvent::User )
    {
      Dispatcher dispatcher; // here im getting the error.
      return true;
    }
return false;
}
4

1 に答える 1

1

0x000006A6を意味するRPC_S_INVALID_BINDING

http://blogs.msdn.com/b/greggm/archive/2006/01/04/509243.aspxから

「バインディング ハンドルが無効です」の説明

今日は、多くの人が VS 2005 デバッガーで報告した 'バインディング ハンドルが無効です' の問題について詳しく説明したいと思います。

まず、問題の解決方法だけが気になる場合は、「ターミナル サービス」サービスを有効にして再起動します。詳細を知りたい場合は、読み進めてください。

ターミナル サービス サービス

多くのユーザーが「セキュリティ上のリスクがあるため、ターミナル サービス サービスを有効にしたくない」などと言っているのを見てきました。この懸念は確かに理解できますが、これはターミナル サービス サービスが提供するものに対する誤解から生じています。

ターミナル サービス サービスを有効にしても、リモート デスクトップが自動的に有効になるわけではありません。リモート デスクトップを無効にする場合は、[マイ コンピュータ] のプロパティ ダイアログの [リモート] タブにある [リモート デスクトップ] チェックボックスをオフにします。デフォルトでは、Windows XP ではリモート デスクトップが無効になっているため、有効にしていない限り、コンピュータでは無効になっているはずです。

では、なぜこのサービスがデフォルトで有効になっているのでしょうか? ターミナル サービス サービスはデフォルトで有効になっています。これは、リモート デスクトップ機能に加えて、リモート アシスタンス、ユーザーの簡易切り替え、プロセスの一覧表示、DCOM のサポート、およびおそらく私がよく知らない他の多くの機能も提供するためです。 TSチームでは働きません。ターミナル サービス サービスを無効にして実行している場合は、おかしな、推奨されない構成で実行しています。また、壊れたタスク マネージャーがあり、このサービスに直接的または間接的に依存している他のものがおそらくたくさんあります。

したがって、Visual Studio で何をしたいのかに関係なく、このサービスを無効にしないでください。

于 2012-12-21T15:30:19.530 に答える