2009-07-14 1 views
1

Wir haben ein Programm, das eine langlaufende (SolidWorks) API-Funktion aufruft. Nach einer Weile erhalten wir einen Fehlerdialog, der sagt, dass "der COM-Server beschäftigt ist ...". Wir haben einige der Forschung getan und haben festgestellt, dass Sie dies durch die Verwendung eines Bit von C++ Code ähnlich steuern:Wie verwende ich AfxOleGetMessageFilter in einem VB .NET-Programm?

COleMessageFilter *pFilter = AfxOleGetMessageFilter(); 
      if(pFilter) 
      { 
       pFilter->SetMessagePendingDelay(60000); 
       pFilter = NULL; 
      } 

Problem ist, wir sind unwissend über die C++ vorne und wollen VB.NET verwenden. Wir haben gegraben und es stellt sich heraus, dass AfxOleGetMessageFilter von einer MFC-Bibliothek stammt. Meine Frage ist also: Gibt es eine Möglichkeit, wie wir diesen Aufruf von VB.NET ohne Einstieg in MFC erreichen können? Ist AfxOleGetMessageFilter ein Wrapper um einen anderen WIN32API-Aufruf, den wir einfach deklarieren können und uns anrufen? Gibt es Alternativen, die wir verfolgen sollten?

Ich habe eine Antwort, die schlägt vor, dass ich die .NET IMessageFilter-Schnittstelle implementieren, aber da diese Schnittstelle nur eine scheinbar nicht verwandte Methode hat, bin ich immer noch ratlos.

Antwort

0

Sie können COleMessageFilter von MFC auf diese Weise nicht wiederverwenden.

Sie müssen implement IMessageFilter in VB.Net

+0

Ich sehe nicht, wie IMessageFilter verwendet werden kann, um das Timeout zu verlängern oder auszusetzen, es setzt nur eine Methode namens PreFilterMessage, die nicht gut zu tun scheint. ??? – scott8035

+0

Ahh ... realisierte gerade, dass du einen Link zur Verfügung gestellt hast ... – scott8035