Veröffentlicht 19. September 200618 j Hallo, ich habe von nem Kollegen gesagt bekommen, ich soll in mein Projekt folgende Zeilen einbauen: while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } Allerdings ist die Software auf MFC-Basis und da hab ich zwei Zeilen: BEGIN_MESSAGE_MAP(Crc_opcApp, CWinApp) END_MESSAGE_MAP() Ist damit denn nicht obiges schon erfüllt???
19. September 200618 j ??? Vielleicht schilderst du lieber das Problem das du mit deinem Programm hast. Denn das Eingangsposting ist recht Sinnlos. In einer MFC Anwendung musst du dich nicht selber um das Abfragen der Nachrichten vom System kümmern, da dies intern vom MFC Gerüst erledigt wird.
19. September 200618 j Autor Ja eben. Also ich greife mit meiner DLL auf einen OPC-Server zu (zur Abfrage von Maschinendaten): byte read(); und void write(byte daten); Beim Schreiben erfolgt das ganze asynchron, d. h. mit write() wird der Schreibvorgang auf dem Server angestoßen und wenn er fertig ist, kommt einer Callbackfunktion vom Server zurück, mit dem Resultat des Schreibvorgangs. In meinem Projekt, von dem aus ich auf die DLL zugreife befinden sich drei buttons (lesen; schreiben; mehrere Daten schreiben). Wenn ich auf schreiben klicke, wird korrekt der Schreibvorgang angestoßen und die Callbackfunktion kommt zurück. Beim Schreiben meherer Daten allerdings, kommt die Callbackfunktion erst zurück, wenn die aufrufende Funktion (Funktion des Buttons _onclick) verlassen wird. Demzufolge tritt die Callbackfunktion nie ein wenn in dem Clientprojekt ständig geschrieben wird. Woran liegt das?
19. September 200618 j Ich bin ziemlich sicher, die Callbackfunktion kommt schon früher zurück. Du siehst davon nur nichts, weil du die Nachrichtenschleife blockierst.
19. September 200618 j Autor und an was könnte das liegen? Habe in die Callback ne Messagebox eingebaut, die kommt auch erst so spät
19. September 200618 j Wie sieht denn dieser Callback aus? Gibst du einen Funktionszeiger an, oder läuft das auch über eine Windows-Nachricht?
19. September 200618 j Autor Also der direkte Aufruf des Servers sieht so aus: // // OnWriteComplete called by OPC server when an async write request has been carried out // STDMETHODIMP COPCDataCallback::OnWriteComplete( /* [in] */ DWORD dwTransid, /* [in] */ OPCHANDLE hGroup, /* [in] */ HRESULT hrMastererr, /* [in] */ DWORD dwCount, /* [size_is][in] */ OPCHANDLE __RPC_FAR *pClienthandles, /* [size_is][in] */ HRESULT __RPC_FAR *pErrors) { m_pParent->CallbackWriteComplete(dwTransid, hrMastererr); return S_OK; }; und CallbackWriteComplete(...) ist meine Funktion.
19. September 200618 j Autor Hab das Problem jetzt gefunden. Der OPC-Server basiert ja auf COM-Technologie. Und beim Initialisieren mittels CoInitialize hab ich vergessen "Multithreaded" als Parameter anzugeben. Jetzt funktionierts
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.