Tutorial zu DllCallbackRegister und DllCallbackGetPtr gesucht-> AutoIt-Hilfe ist hier rudimentär

  • Hi, AutoIt nutze ich sehr extensiv. Allerdings gibt Funktionen wie DllCallbackRegister oder DllCallbackGetPtr, bei der mir die AutoIt-Hilfe nicht viel weiterhilft. Mit Ach und Krach kriege ich die Funktionen zum Laufen (Auswertung des Kontextmenüs), tappe aber wie ein Blinder im Dunkel herum. Es wäre schön, wenn jemand in mehreren Beispielen den Hintergrund der Funktionen noch besser belichten könnte als dies in der Hilfe der Fall ist ...

    Ich bin sicher, dass dies auch bei vielen anderen auf Interesse stösst. Im voraus besten Dank Jan

  • Hi BugFix, ich kann Dir nur anbieten es zur Korrektur zu lesen und zu gucken, ob es OMA-tauglich geschrieben ist. Bei Bedarf kann ich auch eine Hilfedatei im CHM-Format schreiben. Einer Deiner DLL-Tutorials hab ich mir schon reingezogen. Das mit den Strukturen ist mir neu gewesen. Pointer ist mir auch nur vage ein Begriff (sowas wie ein Zeiger oder eine Variable) Gruß Jan

  • Hallo, ich habe im grunde genommen das gleiche Anliegen wie der Threadstarter hier.

    Frage:

    Wozu wird dieses DllCallBackRegister benötigt bzw. ab wann findet es eine Verwendung ?

  • Callback-Funktionen sind Funktionen die an eine andere Funktion übergeben werden um von dieser aufgerufen zu werden.
    Prinzipiell geht es darum den Nutzer kleine Codeteile selbst festzulegen und so gewisse Operationen flexibler zu machen.

    Beispiel: Jemand hat einen effektiven Sortieralgorithmus programmiert (sagen wir mal Introsort).
    Der Knackpunkt bei jedem Sortieralgorithmus ist ein Vergleich 2er Elemente welches von ihnen größer ist.
    Unser Programmierer hat dies so umgesetzt: if a > b then... else...
    Das mag ja noch für einfache Zahlen und auch Strings funktionieren. Versagt aber sobald unsere Elemente anders sind.
    Beispielsweise 3D-Punkte in Form eines Arrays mit 3 Elementen.
    Eine Abfrage mit ">" funktioniert da nicht.
    Der User kann die Sortierfunktion also leider mit so einem Datenelemttyp nicht verwenden.
    Nun der Ausweg: Callback-Funktionen.
    Wenn der Programmierer den Größenvergleich nicht mehr fest einbaut sondern ihn auslagert und vom User bestimmbar macht kann die Sortierfunktion von viel mehr Typen verwendet werden.
    Er würde das ganze so (Pseudocode) umschreiben:

    Code
    Func Sortierfunktion(aDaten, cb_IstGroesser(Elem, Elem) * )
    ...
    If cb_Istgroesser(aDaten[i], aDaten[i+1]) Then ... Else...
    ...
    EndFunc

    Der User kann dann seine eigene Vergleichsfunktion schreiben und der Sortierfunktion übergeben.
    Allerdings wird nicht direkt die Funktion übergeben sondern nur ein Verweis darauf wo sie im Speicher liegt - ein Pointer.

    Ich hoffe das Grundprinzip ist erstmal klarer geworden?

  • Hallo Aspirin,
    vielen Dank erstmal für deine Mühe mir die CallBack Funktion näher zu erläutern :) , allerdings habe ich bis dato noch nicht mit 2d oder 3d Arrays gearbeitet (bin nämlich gerade von AHK nach Autoit umgestiegen). Und im Pseudocode kommt die Callback Funktion auch garnicht vor,so das ich mir einen Reim draus machen könnte :S


    Aber soweit ich jetzt schon verstanden habe, hat diese DllCallBackRegister nicht unbedingt etwas zwingend mit dll´s zu tuen, im Gebrauch.

  • allerdings habe ich bis dato noch nicht mit 2d oder 3d Arrays gearbeitet


    Gut ignorier das - sagen wir halt du willst weiterhin ganz normale Zahlen von der Funktion sortieren lassen - nur halt absteigend statt aufsteigend sortiert (dann muss größer und kleiner vertauscht werden).
    Dann erweitern wir das Beispiel aufgrund deines Hinweises:

    Und im Pseudocode kommt die Callback Funktion auch garnicht vor,so das ich mir einen Reim draus machen könnte


    Prinzipiell, ob Dll oder woanders, sind Callback-Funktionen dazu da Codeteile in anderen fertigen Code selbst festzulegen.