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. Marthog

Beiträge von Marthog

  • Wie findet ihr den PC ?

    • Marthog
    • 28. Juli 2011 um 17:33

    Mein PC hat ungefähr gleiche Leistung und hat afaik 100 mehr gekostet. Aber das war vor 2 Jahren.
    Lohnt sich also nicht wirklich.

  • B.E.S.U.C.H.E.R. - Die fast humane KI - Sie weiß ALLES

    • Marthog
    • 26. Juli 2011 um 16:18
    Zitat

    Kennst du mich?
    Natuerlich, ich chatte doch gerade mit Dir :-).
    Kennst du dich?
    Leider nein.

    Der Bot kennt nichtmal sich selbst.

  • größere hexwerte addieren, aber wie ?

    • Marthog
    • 26. Juli 2011 um 01:18
    Zitat von WhiteLion


    .... aber was ist mit 64bit ?

    Sollte gehen

  • 3D-Körper darstellung

    • Marthog
    • 26. Juli 2011 um 00:49

    Willst du grafisch hochwertige Spiele machen, kannst du auch das UDK nehmen. Geht damit recht einfach.

    Allerdings müsstest du erstmal programmieren können.

  • größere hexwerte addieren, aber wie ?

    • Marthog
    • 26. Juli 2011 um 00:45
    Spoiler anzeigen
    [autoit]

    $x = "DDDDDDDD"
    $y = "11111111"
    Func HexToInt($hex)
    Return Int(Binary("0x"&$hex))
    EndFunc
    Func IntToHex($int)
    Return StringTrimLeft(Binary($int), 2)
    EndFunc

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

    Func HexAdd($a, $b)
    Return IntToHex(HexToInt($a) + HexToInt($b))
    EndFunc
    Func HexSub($a, $b)
    Return IntToHex(HexToInt($a) - HexToInt($b))
    EndFunc
    Func HexMul($a, $b)
    Return IntToHex(HexToInt($a) * HexToInt($b))
    EndFunc
    ; etc

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

    MsgBox(0,"$result", HexAdd($x, $y))

    [/autoit]

    Geht mit den Funktionen einfach und Fehler lassen sich schnell beheben.
    Generell würde ich aber vorschlagen, intern immer mit integern zu rechnen und nur bei Ausgabe (Datei, MessageBox) in Hex umzuwandeln.

  • Geschwindigkeitsvergleich C, Basic, Pascal Unerwartetes Ergebnis?!

    • Marthog
    • 6. Juli 2011 um 14:07

    VC++ optimiert zu gut. :D

    Da letztendlich alle Ergebnisse wieder verworfen werden und der Rüchgabewert der eine Parameter ist, wird alles weggestrichen.

    Code
    .text:00401000 ; __stdcall Calc(x)
    .text:00401000 _Calc@4         proc near               ; CODE XREF: _main+15p
    .text:00401000
    .text:00401000 arg_0           = dword ptr  4
    .text:00401000
    .text:00401000                 mov     eax, [esp+arg_0]
    .text:00401004                 retn    4
    .text:00401004 _Calc@4         endp
  • WARNING: Dim deprecated as declaration

    • Marthog
    • 29. Juni 2011 um 18:14

    Dim ist die alte Deklarationsweise, bevor Local und Global eingeführt wurde.
    Local und Global geben präziser an, wie etwas deklariert wird. Dim blieb im Code, ist aber unnötig.

  • WARNING: Dim deprecated as declaration

    • Marthog
    • 29. Juni 2011 um 18:05
    Zitat von johny1099

    Das Script funktioniert aber auch mit Dim. Und es ist lediglich ein Warnhinweis und keine Fehlermeldung.

    Es bedeutet, dass Dim veraltet ist und nicht mehr verwendet werden sollte. Aus Kompatiblitätsgründen ist es immernoch enthalten, aber vielleicht nicht mehr lange.

  • msgbox, wenn bild aufgerufen wird

    • Marthog
    • 29. Juni 2011 um 15:45

    Du könntest das AutoIt-Programm als Standartprogramm für diesen Dateityp eintragen und über das Skript dann Irfan View oder so starten.

  • Einstieg in C++

    • Marthog
    • 21. Juni 2011 um 20:22

    Ich hab ein online-Tutorial genutzt, allerdings gibt es dieses nicht mehr.

    Am Anfang hab ich den Compiler Dev-C++ verwendet, weil er sehr viel einfacher zu bedienen ist. Später hab ich aber zu Microsoft Visual C++ (die kostenlose Expressedition) gewechselt, weil der Compiler wesentlich neuer und schneller, dafür aber auch sehr komplex ist.

    Am Anfang hab ich die Tutorials gelesen, ausprobiert und rumexperimentiert. Das war eines, worin es nur um die Grundlagen und nicht um spezielle Module geht.
    Der Anfang war recht leicht, schwierig waren nur die Teile mit Pointern und objektorientierter Programmierung.

    Nach den Grundlagen hab ich autodidaktisch weitergelernt und mir die Aufgabe gestellt, den normalen Editor nachzuprogrammieren. Das war eigentlich noch kein C++, sondern normales C. Ich hab keine Klassen etc verwendet.

    Schließlich hab ich mit der Irrlichtengine angefangen und dadurch auch das Wissen über OOP stark ergänzt.

    Wenn du die Grundlagen (Variablen, Funktionen, structs, Arrays, Pointer) verstanden hast, würde ich dir empfehlen, erstmal anschaulicher zu arbeiten, um das zu üben.
    Ich hab mit Winapi-GUIs geübt (BEISPIELE)

  • 3D Game: Labyrinthos (Zeit-/Lanmodus) + Wettbewerb

    • Marthog
    • 18. Juni 2011 um 13:46

    Dein Programm hat meinen Windoof beinahe zum Absturz gebracht, als ich versucht hab, es ohne Adminrechte zu starten.

  • autoit ist zu langsam

    • Marthog
    • 16. Juni 2011 um 19:06

    AutoIt ist natürlich sehr langsam, allerdings braucht man für Automatisierungen und kleine Tools auch keine hohe Geschwindigkeit.
    Auch wenn es oft dazu benutzt wird, ist AutoIt nicht für Spiele gedacht.

    Ansonsten hilft nichts so gut, wie effektive Programmierung. Auch ohne inline-Assembler und eigene DLLs erreicht man gute Geschwindigkeiten. Einfach mal selber ausprobieren und messen.

  • xVideo.dll

    • Marthog
    • 13. Juni 2011 um 17:40

    Übernimm die Dllcalls nicht von Basic, sondern von C. Das geht am einfachsten.

    Die entscheidende Datei ist xVideo.h.

    Schreib am Besten erstmal die UDF.
    Hier ist schonmal ein Anfang:

    Spoiler anzeigen
    [autoit]

    Global $__xVideo_DLL ; dll - handle

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

    Func _xVideo_UDF_Open()
    $__xVideo_DLL = DllOpen("xVideo.dll")
    EndFunc

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

    Func _xVideo_UDF_Close()
    DllClose($__xVideo_DLL)
    EndFunc

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

    ; Constanten:
    Global Const $xVideo_VERSION = 0x01020001 ; API version
    Global Const $xVideo_ATTRIB_VOL = 1 ;used to set Audio Volume
    Global Const $xVideo_ATTRIB_PAN = 2 ;used to set Audio Pan
    Global Const $xVideo_ATTRIB_RATE = 3 ;used to set Graph Rate
    Global Const $xVideo_ATTRIB_AspectRatio = 4 ;used to set Aspect Ratio
    Global Const $xVideo_ATTRIB_PITCH = 5 ;used to set Audio Pitch
    Global Const $xVideo_ATTRIB_AVSync = 6 ;used to set Audio/Video Delay
    Global Const $xVideo_ATTRIB_TEMPO = 7 ;used to set Audio Tempo
    Global Const $xVideo_ATTRIB_ChanProcess = 8 ;used to set audio channel to be processed

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

    ; ...

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

    ; Funktionen
    Func _xVideo_Init($handle)
    Local $aRet = DllCall($__xVideo_DLL, "BOOL", "xVideo_Init", "hwnd", $handle)
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
    EndFunc
    Func _xVideo_GetVersion()
    Local $aRet = DllCall($__xVideo_DLL, "DWORD", "xVideo_GetVersion")
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
    EndFunc
    Func _xVideo_Free()
    Local $aRet = DllCall($__xVideo_DLL, "BOOL", "xVideo_Free")
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
    EndFunc
    Func _xVideo_StreamCreateFile($hStream, $pos, $flags)
    Local $aRet = DllCall($__xVideo_DLL, "HANDLE", "xVideo_StreamCreateFile", "ptr", $hStream, "DWORD", $pos, "DWORD", $flags)
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
    EndFunc

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

    ; ...

    [/autoit]

    Mit

    [autoit]

    _xVideo_UDF_Open()

    [/autoit]

    wird die DLL geladen und am Ende mit

    [autoit]

    _xVideo_UDF_Close()

    [/autoit]

    wieder freigegeben. Das ist nicht immer nötig, aber es erspart auf jeden Fall Zeit, weil die Datei nicht jedesmal nu geladen werden muss.


    Dein Skript macht überigens keinen Sinn.
    xVideo_Free gibt den Arbeitsspeicher am Ende wieder frei. Am Anfang hat es nichts zu suchen.
    xVideo_Init erwartet als ersten Parameter nicht 0, sondern das Windowhandle (von GUICreate).

  • xVideo.dll

    • Marthog
    • 13. Juni 2011 um 16:47

    Geht auch DIESE UDF?

    Ansonsten sieht dar Code nicht so schwer aus. Ich glaube, man könnte daraus schnell eine UDF machen.

  • Betriebssystem Umfrage

    • Marthog
    • 13. Juni 2011 um 15:30

    Ich hab Vista 64 bit und bin ganz zufrieden. Läuft alles ganz stabil und bei mir sind keine Bugs aufgetreten, die auf anderen Windowssystemen nicht auch auftreten.

    Ansonsten hab ich noch Kubuntu unter VirtualBox laufen, das ich aber fast nie benutze.

  • [C++] StringToHex, IntToHex, HexToString und HexToInt

    • Marthog
    • 12. Juni 2011 um 18:33

    Stimmt. Es muss

    Code
    fwrite(buffer, 1, 2, file);

    heißen.

  • [C++] StringToHex, IntToHex, HexToString und HexToInt

    • Marthog
    • 12. Juni 2011 um 17:05
    Code
    char * binary = new char[1024];

    erzeugt nur einen buffer und ist damit erstmal nicht so wichtig.

    AF41 kann man so binär abspeichern:

    Code
    char *buffer = new char[3];
    HexToString("AF41", buffer, 3);
    fwrite(file, buffer, 1, 2);

    Die beiden Zahlen bei fwrite geben die Elementgröße an (1 wegen char) und die Anzahl der Elemente (2). Also zweimal ein byte.

    EDIT: Der Buffer muss um 1 größer sein, damit auch die übliche 0 am Ende eines Strings noch daranpasst. Sie wird aber nicht mit in die Dtaei geschrieben.

  • [C++] StringToHex, IntToHex, HexToString und HexToInt

    • Marthog
    • 11. Juni 2011 um 00:04

    Der unterschied beim zusätzlichen b ist nur gering.
    Ohne das b werden alle Zeilenumbruche CR (\n) zu CRLF (\n\r).

    Um wirklich binärdaten zu schreiben, würde ich auch kein fputs nehmen, sondern fwrite.

    Code
    char * binary = new char[1024];
    //......
    fwrite(file, binary, 1, 1024);
    Code
    char * binary = new int[512];
    //......
    fwrite(file, binary, 4, 512);
  • [C++] StringToHex, IntToHex, HexToString und HexToInt

    • Marthog
    • 6. Juni 2011 um 22:33

    Ich hab noch nie mit Dateien und fstream gearbeitet.

    Dafür verwende ich immer die alten C-Funktionen aus stdio.h: fopen, fclose, fread, fwrite, fseek, ftell, fputs,fprintf.

  • [C++] StringToHex, IntToHex, HexToString und HexToInt

    • Marthog
    • 6. Juni 2011 um 18:59

    1. Du returnst pointer auf lokale Variablen (löst Fehler aus)
    2. Du schreibt in nicht alloziierten Speicher (löst den Absturz aus)


    Arbeite mehr mit Buffern.

    So geht bei mir alles:

    Spoiler anzeigen
    C
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    
    char CharToSingleHex(char a, bool uppercase = true)
    {
        a &= 0x0f;               //Unnötige obere 4 Bits löschen
        if (a>=0 && a<=9)        //Für Hex-Zahlen
            return '0'+a;        //Zahlen sind in einer Reihe ('0'+5 ergibt '5')
        if (uppercase && a>=10 && a<=16)        //Wenn Großbuchstaben und im Buchstabenbereich
            return 'A'+a-10;        //Buchstaben sind in einer Reihe ('A'+1 ergibt 'B'), 10 muss vorher weg
        if (!uppercase && a>=10 && a<=16)
            return 'a'+a-10;
    
        return 0; //Für den Fall eines Codefehlers
    }
    
    
    void StringToHex(const char *str, char *buffer, int buffersize, bool uppercase=true)
    {
        int i=0;
        for (int a=0; (i+1)<buffersize && str[a]; i+=2, ++a)
        {
            buffer[i] = CharToSingleHex(str[a]>>4, uppercase);    //Obere 4 Bits
            buffer[i+1] = CharToSingleHex(str[a], uppercase);     //Untere 4 Bits
        }
        if (i<buffersize)                  //0 am Ende hinzufügen
        {
            buffer[i]=0;
        }
        else            //Fehlermeldung
        {
            puts ("StringToHex - Buffer is too small");
        }
    }
    
    
    int HexToInt(char c)
    {
        if (c>='0' && c<='9')    //Wenn c eine Zahl ist
            return c-'0';        // '5'-'0'=5
        else if (c>='A' && c<='F') //Wenn c ein Buchstabe ist
            return c-'A'+10;      // 'B' - 'A' = 1
        else if (c>='a' && c<='f')  //nochmal für Kleinbuchstaben
            return c-'a'+10;
        //ansonsten:
        return -1;
    }
    
    
    void HexToString(const char *hex, char *buffer, int buffersize)
    {
        int i=0;
        for (; i<buffersize && hex[i*2] && hex[i*2+1]; ++i)
        {
            char c = HexToInt(hex[i*2])<<4 | HexToInt(hex[i*2+1]);
            buffer[i] = c;
        }
        if (i<buffersize)                  //0 am Ende hinzufügen
        {
            buffer[i]=0;
        }
        else
        {
            puts ("HexToString - Buffer is too small");
        }
    }
    
    
    int main()
    {
        //char* hex = "48616C6c6F202b2035";  //Hallo + 5
        char hex[50];
        StringToHex("Hallo + 5", hex, 50);
    
        cout<<hex<<endl;
    
        char buffer[50];
    
        HexToString(hex, buffer, 50);
    
        cout<<buffer<<endl;
        system("PAUSE");
    
    }
    Alles anzeigen

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™