Beiträge von progandy

    So etwa?
    Func CV_IS_STORAGE($storage)
    Return IsPtr($storage) And $storage And BitAnd(DLLStructGetData(DLLStructCreate($tagCvMemStorage, $storage), "signature"), $CV_MAGIC_MASK) = $CV_STORAGE_MAGIC_VAL
    EndFunc

    Du hast vergessen, dass man einer Variablen nun eine Funktion zuweisen kann, Die Arraydeklaration wurde modifiziert, man kann die Größenangabe und evtl sogar die Klammern weglassen, da bin ich mir gerade nicht mehr sicher. Und ich weiß nicht, an was gerade sonst noch gearbeitet wird. Da könnten noch einige Überraschungen kommen.
    Func a()
    Return 1
    EndFunc
    Global b = a
    c = b()

    Schöner Effekt, den du da erzeugst.
    Andy: Das ist eher das gleiche Prinzip wie bei Wackelbildern, nur statt den Linsen wird die Streifenfolie bewegt. Beim Daumenkino wird das Bild nicht aus einzelnen Streifen zusammengesetzt, sondern ist immer komplett vorhanden. Ganz klar ist das selbstgemachte Papierbild viel beeindruckender als das ganze digital (auf dem PC-Bildschirm lässt sich so vieles darstellen) oder die Fertigware (viel zu oft gesehen)

    Hab es nicht getestet, aber laut MSDN ist die Funktionalität gegeben.


    Ich sehe es nicht so. Du musst schon einen übergroßen Buffer erstellen, erst danach bekommst du die Größe. Um die nötige Größe zu finden bevor man den Buffer erstellt, muss die Funktion bei einer Bufferlänge von 0 die nötige Größe angeben oder es muss eine Funktion "GetClipboardFormatNameLength" geben. Beides ist aber nicht vorhanden.

    Zitat

    If the function succeeds, the return value is the length, in characters, of the string copied to the buffer.


    Die Größe des Strings im Buffer, ja. Wenn du einen 12-Zeichen Buffer hast und der String 24 lang ist, dann hast du am Ende 11 oder 12 Zeichen im Buffer und das ist dann auch der Rückgabewert. So lese ich das jedenfalls, testen kann ich gerade nicht weil meine Windows8-VM abgelaufen ist ;)

    Für GetClipboardFormatName kannst du nur einen überlangen Puffer angeben und dann den String passend zuschneiden mit StringLeft. Weder die Funktion och die DLL enthält Funktionalität um die benötigte Größe festzustellen. Mehr als 512 Zeichen werden hier meiner Meinung nach nie benötigt.

    um tja, was denn nur handelt...


    Um einen Regex natürlich :D Naja, Ich brauch ne halbe Minute um diesen speziellen Regex komplett zu verstehen, 5 um ihn genau zu beschreiben.
    Regex für ne Mailadresse oder so ähnlich. Ob jetzt RFC konform oder nicht ist ne andere Frage.
    Edit: Der Regex für alle RFC-konformen Mailadressen (ohne Kommentare) ist wirklich ein Kunstwerk :D http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

    Es gibt noch zwei weitere Varianten:
    - Die DLL erstellt den Buffer selbst und bietet zusätzlich noch eine Funktion zum Freigeben an
    - Die DLL erstellt einen Buffer der bis zum nächsten Aufruf einer Funktion, die den Buffer benötigt gültig ist.
    - Du gibst der DLL die Pointer zu Funktionen zum allokieren, reallokieren und löschen von Speicher. Die DLL nimmt diese Funktion um den Buffer zu allokieren und du machst dann später damit was du willst.

    In Python hingegen ist die Implementierung in Ordnung, da man mit den lesbaren Keywords if und else auskommt.


    Die Python Implementierung ist zwar lesbar aber trotzdem verwirrend, da die Reihenfolge der Schlüsselwörter und Werte völlig anders als bei einem normalen if ist. Daher sollten dafür nicht die gleichen Schlüsselwörter benutzt werden.
    PS: Lasst es mal ruhig angehen, bis die nächste AutoIt-Version kommt dauert es noch eine Weile.

    So?
    [ offen ] Objekte übergeben (Der Code sind 2 Skripte in einer Datei)


    Zitat

    Allerdings muss anschliessend nicht noch mal der Prozess 1 und 2 gestartet werden. Ich brauche das nur einmal!


    Das war ein erweitertes Beispiel, die Prozesse werden nicht erneut gestartet sondern laufen parallel. P1 und P2 füllen jeweils einen Buffer, P0 leert dann diese Buffer langsam wieder währent P1 und P2 andere Buffer füllen. Wenn die einen Buffer wieder leer und die anderen voll sind, nimmt P0 die vollen Buffer und leert sie währent P1 und P2 die leeren wieder füllt.


    Zitat

    Aber die Schwierigkeit ist, diese Bereiche zu erstellen und Pointer dazu zu übergeben. Ich möchte ja nicht die ganzen
    Daten hin und her kopieren, denn das dauert viel zu lange.


    Wirklich? Ich dachte dass das lesen von der Festplatte so langsam ist, dass das rumkopieren im Speicher egal ist.

    AutoItObject enthält eine Funktion, um ein Objekt global allen Programmen zur Verfügung zu stellen.
    Wenn die meiste Zeit bei dir aber bei Festplattenzugriffen drauf geht, kannst du auch folgendes versuchen, das ist vermutlich besser aber in AutoIt viel komplexer:
    - Erstelle 4 Bereiche für geteilten Speicher
    - Prozess 1 sperrt und füllt Bereich 1
    - Prozess 2 sperrt und füllt Bereich 2
    - Prozess 0 wartet bis bereiche 1, 2 frei sind, sperrt sie und liest dann
    - Prozess 1 sperrt und füllt solange Bereich 3
    - Prozess 2 sperrt und füllt solange Bereich 4
    - Prozess 0 wartet bis bereiche 3, 4 frei sind und sperrt sie und ließt dann
    - Prozess 1 - Bereich 1 usw usf... ;)

    Interessant wäre es zu wissen, welche Fremdsprache du gelernt hast. Wenn du nur Englisch gelernt hast, dann kann ich ich verstehen. Durch Englisch habe ich bisher praktisch nichts über (deutsche) Grammatik gelernt.


    Ich hatte Englisch und Französisch. Die Regeln muss man sicher einmal lernen, aber nachdem ich einmal die Struktur verstanden hatte waren alle Erläuterungen für mich unwichtig. Latein habe ich dabei großzügig ausgelassen.

    Viele Deutsche können ja gut Deutsch aber wären nicht in der Lage die Regeln nach denen sie vorgehen zu definieren.


    Grammatik wird überbewertet. Nach der Grundschule vergisst man die deutsche Grammatik schnellstens wieder und die Grammatikregeln der Fremdsprachen hab ich nach der 10. Klasse verlernt. Das geht nur noch per Intuition.