So was habe ich noch nie erlebt !!!



  • Soll ich Dir mal den Code von der gesamten Funktion posten? module->events wird öfter aufgerufen.



  • Ne, aber dir muss doch klar sein, dass ein Helfender wissen muss, von welchem Typ module ist und wie es deklariert ist, wo es allokiert und wieder gelöscht wird. Und, und , und...



  • Außerdem: schieb mal deinen Code weiter nach links und hau die unwichtigen Stellen raus.



  • Ja, das schon! Aber wenn ich Euch die ganze Klasse poste flieg ich wahrscheinlich aus dem Forum. Außerdem wollte ich das Ganze eigentlich nicht zu verwirrend machen.

    module->events ist eine einfach TList, die Pointer (!*ggggggg*) für Eventklassen (sind eigene Klassen) aufnimmt. Normalerweise sollte sie während der ganzen Laufzeit erhalten bleiben und die Eventklassen bereitstellen.

    Komischerweise hats bis heute abend alles wunderbar funktioniert. Erst als ich die if-Anweisung (if (TryStrToInt(funcmenue, menue) ...) geändert hatte, gings nicht mehr. Davor wurde auf TypeLib-eigene Flags geprüft.



  • O.K., den Fehler habe ich jetzt gefunden ! Der Schlüssel dazu war Deine Frage, ob die Funktion mehrmals aufgerufen wird.

    Das ist hier der Fall, weil standartmäßig die TypeInfos der zwei Dispatch-Interfaces einer CoClasse des gerade aktuellen COM-Servers ausgelesen werden (zuerst die Properties und dann die Events).

    Ich habs zwar geändert, aber leider nur sehr unelegant, sprich ich habe die Bedingung in meiner For-Schleife auf i<1 geändert und jetzt gehts. Eigentlich bräuchte ich jetzt ne Funktion, die genau die Dispatch-Schnittstelle für die Properties der CoClasse rauszieht. Hast Du da nen Vorschlag?



  • O.k. hat sich alles erledigt. Lasse jetzt die TList vor meiner For-Schleife erstellen und somit kriegt auch jeder Server nur eine Eventliste. Egal, wieviel Dispatch-Interfaces vorhanden sind.



  • Original erstellt von Darkheart:
    Das ist hier der Fall, weil standartmäßig die TypeInfos der zwei Dispatch-Interfaces einer CoClasse des gerade aktuellen COM-Servers ausgelesen werden.

    Ach so. 😕 😃



  • Ja, ich laß für ein paar COM-Server über LoadTypeLibrary und ein paar andere Funktionen von Windows die jeweiligen TypeLibrarys, die Dispatchschnittstellen etc. auslesen.

    Hat den Hintergrund, daß ich grade für einen Kumpel ne Anwendung programmiere, in der COM-DLL's als Oberflächen eingesetzt werden sollen. Der will nämlich quasi ein Programm mit dynamischer Oberflächengestaltung haben und will nicht jedesmal die Anwendung neu compilieren lassen.

    😃 Udo



  • Ich hatte eigentlich nicht gemeint, dass du mir das erklären musst. Ich versteh's sowieso nicht. 😉



  • Ist gar nicht so schwer! *fg* Allerdings ist das auch mein Erstversuch. Außerdem glaube ich kaum, daß man Dir was erklären muß 😉 oder ?



  • Äh doch. Ich habe weder eine Ahnung, was ein COM-Server ist noch, was eine TypeLibrary noch, was eine Dispatch-Schnittstelle ist. Ehrlich gesagt will ich's auch garnicht wissen. 😉



  • Wo programmierst Du hauptsächlich? Linux oder Windows?



  • Win



  • Ja, und da gibts COM-Server. Aber ich will Dich nicht länger aufhalten. Muß noch ein bischen weitermachen. Die Änderung, die ich gemacht habe, zieht sich jetzt durch das ganze Programm und ich muß noch einiges umstellen.

    Danke Dir für alles!

    Gruß

    Udo



  • Klar man. Immer wieder gern. 🙂


Anmelden zum Antworten