DDE-Steuerung von Acrobat Reader stürzt ab [gelöst]



  • Hallo,
    ich versuche hiermit DDE Nachrichten an den Acrobat Reader zu senden:

    if (pidInst==0)
            if(DdeInitializeA(&pidInst, NULL, APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0L) != DMLERR_NO_ERROR)
    			return false;
    
        QCoreApplication::processEvents();
    
    	HSZ hszService = DdeCreateStringHandleA(pidInst, service.toLocal8Bit().data() , CP_WINANSI);
    	if (!hszService) return false;
    	HSZ hszTopic = DdeCreateStringHandleA(pidInst, topic.toLocal8Bit().data(), CP_WINANSI);
    	if (!hszTopic) {
    	    DdeFreeStringHandle(pidInst, hszService);
    	    return false;
    	}
    	HCONV hConv = DdeConnect(pidInst, hszService, hszTopic, NULL);
    
        QCoreApplication::processEvents();
    
    	DdeFreeStringHandle(pidInst, hszService);
    	DdeFreeStringHandle(pidInst, hszTopic);
        if (!hConv) return false;
    
        //execute requests
        foreach (QString s, commands) {
            QString temp=("["+s.trimmed());
            QByteArray ba= temp.toLocal8Bit();
            HDDEDATA req= DdeCreateDataHandle(pidInst, (LPBYTE) ba.data(), ba.size()+1, 0, 0, CF_TEXT, NULL);
            if (req) {
                HDDEDATA recData=DdeClientTransaction((BYTE*)req, (DWORD)-1, hConv, 0, 0, XTYP_EXECUTE, 1000, 0);
                DdeFreeDataHandle(req);
                if (recData) DdeFreeDataHandle(recData);
            }
            //else QMessageBox::information(0,"TexMakerX",QObject::tr("DDE command %1 failed").arg("["+s),0); //break; send all commands
        }
    
        QCoreApplication::processEvents();
    
        //disconnect
    	DdeDisconnect(hConv);
    
        QCoreApplication::processEvents();
    

    Das Problem ist jetzt, dass bei der Nachricht [AppExit()] der Reader zwar erfolgreich beendet wird, mein Programm aber anschließend irgendwo (nicht in dieser Funktion, vielleicht im QT-Messagehandler) abstürzt.
    Alle anderen Nachrichten funktionieren problemlos, wenn der bereits Reader läuft.
    Läuft er nicht, passiert erstmal gar nichts, wenn man eine Nachricht an ihn versendet. Sobald er aber später einmal gestartet wird, crasht mein Programm sofort (ohne das nochmal eine Nachricht gesendet werden muss)
    Hat jemand sowas schon mal erlebt?

    [edit:] Hab's jetzt wohl gelöst, es hat das CBF_SKIP_ALLNOTIFICATIONS Flag bzw. eine Callbackfunktion gefehlt

    BeniBela


Log in to reply