1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. minx

Beiträge von minx

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • minx
    • 10. August 2014 um 15:58

    Das ist mir auch schon aufgefallen. Ich habe aber keine Ahnung woran das liegt. Selbst mit einem Debugger scheint alles zu gehen, aber AutoIt steigt in Eigenregie aus. Seltsam indeed...

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • minx
    • 10. August 2014 um 14:07
    Zitat von Andy

    C:\PerseusDEV\

    Keine Ahnung wo du das herzauberst. Einfach weder das NPP Skript noch sonstwas anfassen :D , dann müsste es eigentlich gehen. Optimalerweise wird das ganze in C:\minxtech\Perseus entpackt, aber das ist auch nicht zwingend.

    Zitat

    Btw. habe ich die Verzeichnisse angepasst im Execute-Fenster, daher nur aus dem schütteren Gedächtnis..

    Warum nur das? Dort wird der Pfad doch automatisch bestimmt. Da gibts nichts anzupassen. pmake kümmert sich um den Rest.

    // Nachdem zwei Leute unabhängig voneinander gesagt haben es liefe auf Windows 7 habe ich dem eigentlich vertraut. Wenn dann frag mal PainTain o.ä.

    Im besten Fall folgendes machen:

    • Alles löschen
    • 5.14.7.4 herunterladen
    • entpacken
    • DLL registrieren
    • pmake Admin-Rechte gewähren
    • Test.p++ anlegen und per F5 (nicht über irgendein Menü, sondern nur über F5) kompilieren


    Egal wo Test.p++ liegt, dort wird jetzt auch Test.exe bzw. Test.dll erzeugt. Das Aufräumen und kopieren übernimmt pmake ;)

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • minx
    • 10. August 2014 um 12:07

    Getestet sind Windows 8 und Windows 7 64 Bit. Der Fehler, der bei dir auftritt sieht noch unregistrierter DLL aus. Hast du die prsco.dll per regsvr32 registriert?

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • minx
    • 10. August 2014 um 05:09

    Das Tutorial wird mal kurz und schmerzlos ^^ .

    Prinzipiell schreiben wir eine DLL in Perseus und rufen sie in AutoIt auf.

    1 - Perseus DLL schreiben

    Dazu zunächst das aktuelle Build herunterladen, Notepad++ öffnen und eine neue Datei namens Test.p++ anlegen. Jetzt wollen wir dem Compiler mitteilen, dass wir eine DLL schreiben wollen. Dazu kommt in die erste Zeile folgendes (warum siehe Wiki):

    Code
    application PE GUI DLL;

    Dann überlegen wir mal, was die DLL überhaupt machen soll. Rein aus Jux zeichnet die Funktion in diesem Tutorial eine Sinuskurve in einer beliebigen Farbe. Dazu werden vom aufrufenden Skript Device Context, Breite, Höhe und Farbe übergeben. In Perseus kann jede DLL alles, was auch in GUI oder CUI Anwendungen möglich ist. Wir können hier die gesamte WinAPI und natürlich alle Perseus-Includes nutzen. Wir könnten sogar Objekte und Klassen in die DLL packen, aber das brauchen wir hier ganz sicher nicht.

    Was wir aber brauchen sind die WinAPI und diverse Funktionen zur Datentyp-Konvertierung und zum Rechnen. So können wir Floats und Ints nutzen ohne weitere Variablen zu verwenden:

    Code
    include "Windows.inc", "Conversion.inc", "Math.inc";

    Dann deklarieren wir alle DLL-eigenen Variablen, in diesem Fall sind das zwei Puffer für die Koordinaten und ein Loopcounter. Könnten wir auch local machen, brächte aber nichts:

    Code
    dword ptX, ptY, i;

    Jetzt kommen wir zur Hauptfunktion. Im Gegensatz zu PEs brauchen DLLs keinen Einsprungpunkt. Eine Basis-Adresse wird automatisch vom Compiler angelegt. Die Funktion nimmt vier Parameter auf (alles dwords) und gibt provisorisch "1" zurück (auch als dword). Der Header sieht dann so aus:

    Code
    export DrawSine(dword hdc, dword cxClient, dword cyClient, dword crColor) as dword;

    Jetzt rücken wir ein und schreiben den Code. Das ist einfache Mathematik und bedarf nicht viel Erklärung. Am Ende der Funktion steht wie immer ein end:

    Code
    // Zeichenfunktion
    export DrawSine(dword hdc, dword cxClient, dword cyClient, dword crColor) as dword;
    	// Querlinie
    	MoveToEx(hdc, 0, cyClient / 2, NULL);
    	LineTo(hdc, cxClient, cyClient / 2);
    
    
    	// Kurve
    	for (i = 0; i < 1000; i++) {
    		ptX = i * cxClient / 1000;
    		ptY = Sng2Int(Int2Sng(cyClient) / 2.0 * (1.0 - Sin(2.0 * Pi() * Int2Sng(i) / 1000.0)));
    		SetPixel(hdc, ptX, ptY, crColor);
    	}
    
    
    	return(1);
    end;
    Alles anzeigen

    Damit ist der DLL Code schon fertig. Wir schmeißen ihm einfach den DC einer AutoIt GUI vor die Füße und den ganzen Rest übernimmt die DLL.

    2 - AutoIt Test Code

    GUI erstellen, DC auslesen, DLL aufrufen und das wars schon. Bei mir dauert das komplette neuzeichnen etwa 3.6ms (~280 FPS). Durch spielen mit den Variablen und durch besseren Perseus-Code kann man da noch ne Menge Speed rausholen, aber das ist ja nur eine Demonstration. Hier ist der AutoIt Code:

    [autoit]

    #include <WinAPI.au3>

    [/autoit][autoit][/autoit][autoit]

    ; Standard BlaBla
    $hGUI = GUICreate("Perseus Dll Test")
    $hDC = _WinAPI_GetDC($hGUI)
    GUISetBkColor(0xFFFFFF)
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    ; 1000x testen und durschn. Zeit ermitteln
    $iTimer = TimerInit()
    For $i = 1 To 10^3
    ; Dll wie jede andere DLL aufrufen
    DllCall("Test.dll", "dword", "DrawSine", "dword", $hDC, "dword", 400, "dword", 400, "dword", 0x00A088FF)
    Next
    ConsoleWrite("-> Avg. time: " & Round(TimerDiff($iTimer) / 10^3, 2) & " ms." & @LF)

    [/autoit][autoit][/autoit][autoit]

    While GUIGetMsg()<>-3
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Exit _WinAPI_ReleaseDC($hGUI, $hDC) - 1

    [/autoit]

    3 - Schon fertig

    Ich hoffe es war anschaulich genug. Die Source-Files hänge ich an (auch die kompilierte DLL). Sicher lässt sich das für andere Zwecke sinnvoll einsetzen (Multithreading ist extrem einfach in Perseus. Damit lassen sich komplexe Routinen schön auslagern ^^ ). Vielleicht schreibe ich mal ein Mandelbrot-Beispiel o.ä.

    Dateien

    Perseus DLL.zip 2,49 kB – 549 Downloads
  • Performance-Analyse der neuen Datenstruktur "Map"

    • minx
    • 9. August 2014 um 19:38

    BugFix

    Letztlich sind sowieso die Verwendungen der neuen Funktionen interessant, welche diese komplett zweckentfremden ^^

    Das hier klappt dann zukünftig deutlich besser, mit Sachen wie:

    [autoit]

    local $class[]

    [/autoit][autoit][/autoit][autoit]

    Func somefunc($str)
    MsgBox(0,'',$str)
    EndFunc
    $class.afunc = somefunc

    [/autoit][autoit][/autoit][autoit]

    somefunc(FuncName($class.afunc))
    $class.afunc("s")

    [/autoit]

    ^^

  • technisches Zeichnen am PC

    • minx
    • 8. August 2014 um 22:58

    SketchUp ist für solche Zecke geschaffen. (Und noch ist es kostenlos).

  • _Geo_Diff - Exakte Berechnung der Distanz zweier Punkte auf der Erdoberfläche

    • minx
    • 7. August 2014 um 16:31
    Zitat von AspirinJunkie

    Wo stammt dieser Näherungsalgorithmus her

    Laut meinem Gekritzel ist das eine Methode von Andoyer. Das stammt aus meinen Aufzeichnungen ausm Astronomie-Kurs. Wir hatten das damals in Excel umgesetzt, aber ich wollte es nochmal als AutoIt Funktion umschreiben.

    Zitat von AspirinJunkie

    Ein Hinweis vielleicht noch: Bei deinem Koordinatenparsing negierst du die Koordinatenangaben wenn sie Ostkoordinaten sind. Normal ist es aber eigentlich Westkoordinaten zu negieren.
    Am Ergebnis ändert das aber nichts - eher ein Schönheitsdetail.

    Da habe ich genau das Gegenteil gelernt und damit auch in Prüfungen gerechnet ^^

    Zitat von AspirinJunkie

    Theoretisch kann man auf dem Ellipsoid bis zu jeder beliebigen Genauigkeit rechnen.

    Das ist sicher richtig, aber diese Näherung reicht völlig aus, wenn man sie z.B. mit der geläufigen AGPS Triangulation vergleicht.

  • _Geo_Diff - Exakte Berechnung der Distanz zweier Punkte auf der Erdoberfläche

    • minx
    • 7. August 2014 um 01:34

    Titel sagt viel, das Skript den Rest ^^ . Beispiel ist mit dabei.

    Spoiler anzeigen
    [autoit]


    ; Paris Observatory
    $geoParis = 'E-2-20-14-N-48-50-11'

    [/autoit] [autoit][/autoit] [autoit]

    ; US Naval Observatory
    $geoUSA = 'W-77-3-55.5-N-38-55-17'

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(@LF)
    ConsoleWrite("Distance between the two given locations is " & _Geo_Diff($geoParis, $geoUSA) & " ± 0.05 km!" & @LF)
    ConsoleWrite(@LF)

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ================================================================================
    ; Name ..........: _Geo_Diff
    ; Description ...: Compute the gedesic distance between two Earth surface
    ; ...............: coordinates to an accuracy of about ±50 meters. To get
    ; ...............: this degree of accuracy, this function takes into account
    ; ...............: the spheroidal flattening factor of the Earth rather than
    ; ...............: assuming that the Earth is a perfect sphere.
    ; Syntax ........: _Geo_Diff($geoStart, $geoFinish[, $iDec = 2[, $iUnit = 0]])
    ; Parameters ....: $geoStart - Location Coordinates in GeoData form (see Example)
    ; $geoFinish - Location Coordinates in GeoData form (see Example)
    ; $iDec - [optional] Number of decimal places. Default is 2.
    ; $iUnit - [optional] The unit to use. Default is 0.
    ; 0 = km (± 0.05)
    ; 1 = mi (± 0.03)
    ; 2 = nmi (± 0.03)
    ; Return values .: Distance in the given unit, rounded to the given number of decimal places.
    ; Author ........: minx
    ; Example .......: s. above
    ; ===========================================================================================
    Func _Geo_Diff($geoStart, $geoFinish, $iDec = 2, $iUnit = 0)
    Local $aData[4]
    Local $fTemp, $aTemp

    [/autoit] [autoit][/autoit] [autoit]

    $aTemp = StringSplit($geoStart, "-", 3)
    $aData[0] = ($aTemp[1] * 3600 + $aTemp[2] * 60 + $aTemp[3]) / 3600
    If $aTemp[0] = "E" Then $aData[0] *= -1
    $aData[1] = ($aTemp[5] * 3600 + $aTemp[6] * 60 + $aTemp[7]) / 3600
    If $aTemp[0] = "S" Then $aData[0] *= -1

    [/autoit] [autoit][/autoit] [autoit]

    $aTemp = StringSplit($geoFinish, "-", 3)
    $aData[2] = ($aTemp[1] * 3600 + $aTemp[2] * 60 + $aTemp[3]) / 3600
    If $aTemp[0] = "E" Then $aData[0] *= -1
    $aData[3] = ($aTemp[5] * 3600 + $aTemp[6] * 60 + $aTemp[7]) / 3600
    If $aTemp[0] = "S" Then $aData[0] *= -1

    [/autoit] [autoit][/autoit] [autoit]

    Local $ff = (1 / 298.257)

    [/autoit] [autoit][/autoit] [autoit]

    $UF = 1
    If $iUnit = 1 Then $UF = 1.609344
    If $iUnit = 2 Then $UF = 1.852

    [/autoit] [autoit][/autoit] [autoit]

    ; auxiliary angles
    $F = ($aData[1] + $aData[3]) / 2
    $G = ($aData[1] - $aData[3]) / 2
    $L = ($aData[0] - $aData[2]) / 2

    [/autoit] [autoit][/autoit] [autoit]

    ; (co)sines of auxliliary angles
    $SG = Sin($G * ATan(1) / 45)
    $CG = Cos($G * ATan(1) / 45)
    $SF = Sin($F * ATan(1) / 45)
    $CF = Cos($F * ATan(1) / 45)
    $SL = Sin($L * ATan(1) / 45)
    $CL = Cos($L * ATan(1) / 45)
    $S = ($SG * $CL) ^ 2 + ($CF * $SL) ^ 2
    $C = ($CG * $CL) ^ 2 + ($SF * $SL) ^ 2
    $O = ATan(Sqrt($S / $C))
    $R = Sqrt($S * $C) / $O
    $D = 2 * $O * 6378.14
    $H1 = (3 * $R - 1) / (2 * $C)
    $H2 = (3 * $R + 1) / (2 * $S)

    [/autoit] [autoit][/autoit] [autoit]

    ; distance and angle between start and finish
    ; on the surface of a geodesic sphereoid
    Return Round($D * ((($SF * $CG) ^ 2 * $H1 * $ff + 1) - (($CF * $SG) ^ 2 * $H2 * $ff)) / $UF, $iDec)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Account löschen

    • minx
    • 5. August 2014 um 17:12

    Kontaktiere einen Admin (Gun-Food oder i2c) mit deiner Bitte. Deine Beiträge bleiben übrigens normalerweise erhalten, nur dein Profil ist nicht mehr zugänglich und du wirst in jedem Beitrag als "unregistriert" markiert.

  • Nächstes Tutorial Thema?

    • minx
    • 5. August 2014 um 17:09
    Zitat von Mars

    Zudem wird es wenn es um CPU/GPU geht kaum noch was mit AutoIt zu tun haben.

    Da irrst du aber ;) . Es geht in diesem Thema um die gesamte Palette von 2D zu 3D PGs.

  • Nächstes Tutorial Thema?

    • minx
    • 5. August 2014 um 02:14

    Das ACB 2 dauert garantiert noch ein gutes Jahr ^^

  • Nächstes Tutorial Thema?

    • minx
    • 5. August 2014 um 01:53

    Hi :)

    Ich möchte demnächst mal wieder ein Tutorial schreiben. Ich habe grundsätzlich drei Themen über die ich reden kann und möchte. Es ist erstmal nur ein Thema verwirklichbar, da das Schreiben von Code, das Erstellen von Illustrationen, das Formatieren und das Korrekturlesen viel Zeit beanspruchen. Zum umgesetzten Thema soll ein tiefgreifender und verständlicher Eindruck vermittelt werden.

    Thema 1: Genetische Algorithmen und Künstliche Neuronale Netzwerke

    Hierbei werden bekannte mathematische Probleme durch GA gelöst und KNNs trainiert.

    Thema 2: Eine 3D Engine bauen - von Grund auf

    Die Mathematik und der Code hinter Engines wird erklärt und demonstriert. Am Ende steht ein eigenes kleines Spiel, ohne externe Abhängigkeiten wie OpenGL oder DirectX.

    Thema 3: Fortgeschrittene prozedurale Grafiken und GPU-CPU Interkompatibilität

    Hier bauen wir komplexere prozedurale Grafiken als bisher, erstellen komplette Routinen in Assembly und nutzen Tricks um die CPU zur GPU zu machen. (Das ist ein hochkomplexes, sprachenübergreifendes Tutorial)

    Besteht denn zu einem davon Interesse?

  • Alles Gute James!

    • minx
    • 3. August 2014 um 01:52

    Schande über mich, aber ich bin zu spät. Trotzdem noch alles Gute nachträglich! :D

    Zum Geburtstag gibts Code in Kuchenform:
    [Blockierte Grafik: http://donkirkby.googlecode.com/svn/trunk/CodeCake/codecake.png]

  • AutoIt-Tools und Virusmeldung

    • minx
    • 2. August 2014 um 02:47

    steven

    So ein Quatsch. Mein Programm wurde sogar ohne mein Zutun von der Redaktion aufgenommen und geprüft: http://www.softpedia.com/get/Programmin…s/AuBASIC.shtml
    Davon gibts auch nur eine kompilierte Version und damit hatte keiner ein Problem und ich bezweifle, dass kein Virenscanner darauf angesprungen ist (ich hab es nicht überprüft).

    Zitat

    Softpedia guarantees that AuBASIC 0.1 is 100% CLEAN, which means it does not contain any form of malware, including spyware, viruses, trojans and backdoors.


    Weiter dazu:

    Zitat

    This product was last tested in the Softpedia Labs on 29th of August 2012 by Alexandru Teodorovici

    Mach nicht SoftPedia runter ^^ . Da sitzen echte Leute dahinter und sie stellen sogar Mirrors für alte, vergessene aber gute Software ohne Nachfrage. Außerdem packen sie keinen Installer und keine Malware in die Downloads, wie CHIP.de, Softonic, Freeware.de etc. Ich hatte inzwischen schon wieder völlig vergessen, dass ich das mal gemacht habe. Es ist fürchterlich geschrieben und ist verbuggt wie sonstwas. Trotzdem hat es irgendwie über 1,4k Downloads über den sourceforge Mirror bekommen. Naja, Russen eben ^^

  • AutoIt.de Trading-Duell - Siegerehrung

    • minx
    • 2. August 2014 um 00:33

    Wobei ich hier Homelike (deinen Namen spreche ich gedanklich inzwischen "home like" aus :P ) nochmal für den meisten Biss auszeichnen würde :D . Du hast von allem am meisten Verlust ausgeglichen ^^

  • AutoIt.de Trading-Duell - Siegerehrung

    • minx
    • 1. August 2014 um 21:34

    Ich hätte nicht gedacht, dass es jemand unter Homelike schafft, aber es ist passiert. Mal sehen ob wir das nochmal machen. Das nächste Mal vielleicht mit normalen Aktienhandel ;)

  • AutoIt.de Trading-Duell - Siegerehrung

    • minx
    • 1. August 2014 um 20:18

    Die erste Runde ging wie folgt aus:

    1. Platz und der einzige mit Gewinn: alpines!
    [Blockierte Grafik: http://r37.imgup.net/alpi7958.png]

    2. Platz: Homelike!
    [Blockierte Grafik: http://w77.imgup.net/homef22c.png]

    3. Platz: PainTain!
    [Blockierte Grafik: http://p05.imgup.net/pain27a4.png]

    Rangliste:
    [Blockierte Grafik: http://f81.imgup.net/svg4dd4.png]

  • AutoIt Live-Debugger und wie man ihn benutzt

    • minx
    • 1. August 2014 um 14:08

    Es wäre wichtig zu wissen, was genau nicht funktioniert?

  • AutoIt-Tools und Virusmeldung

    • minx
    • 31. Juli 2014 um 13:21

    Das hat nicht unbedingt etwas mit Norton zu tun. Inzwischen analysieren alle Virenscanner die Vorgänge in Programmen relativ genau (bei AutoIt ist das sehr gut möglich.). Ohne UPX schlagen immer mehr Filter an, weil die API Calls nicht mehr durch UPX versteckt werden (Symantec (Norton-Firma u.a.) nennt das das "Packer Problem").

    Diese sogenannten heuristischen Analysen, die zum jetzigen Zeitpunkt von jedem gängigen Virenscanner vorgenommen werden, laufen aber leider immer mehr schief. Da ist nichts zu machen. Ein unglückliches Workaround wäre einen acker zu verwenden, zu welchem es einen offiziellen Unpacker gibt. Das grenzt die Probleme der Virenscanner ein. Bei Norton gibt es übrigens sogar einen heuristischen Unpacker (gibt mehrere Paper von Symantec dazu), der sollte dem ganzen noch zuträglicher sein.

  • The Perseus Programming Language

    • minx
    • 27. Juli 2014 um 14:00
    Zitat von bobekos

    Die Ausführung der pmake.exe führt zu diesem Fehler:

    Es steht nirgends, dass du etwas ausführen musst :rolleyes:

    Zitat von Andy

    Wozu packt jemand überhaupt eine EXE? Um Platz auf der Platte zu sparen? Eben...

    Tja, Pech gehabt Andy, hier ist nicht gepackt. :P

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™