Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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???

Geschrieben

???

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.

Geschrieben

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?

Geschrieben

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.

Geschrieben

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 Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...