Mein PC hat ungefähr gleiche Leistung und hat afaik 100 mehr gekostet. Aber das war vor 2 Jahren.
Lohnt sich also nicht wirklich.
Beiträge von Marthog
-
-
Zitat
Kennst du mich?
Natuerlich, ich chatte doch gerade mit Dir :-).
Kennst du dich?
Leider nein.Der Bot kennt nichtmal sich selbst.
-
.... aber was ist mit 64bit ?Sollte gehen
-
Willst du grafisch hochwertige Spiele machen, kannst du auch das UDK nehmen. Geht damit recht einfach.
Allerdings müsstest du erstmal programmieren können.
-
Spoiler anzeigen
[autoit]$x = "DDDDDDDD"
[/autoit] [autoit][/autoit] [autoit]
$y = "11111111"
Func HexToInt($hex)
Return Int(Binary("0x"&$hex))
EndFunc
Func IntToHex($int)
Return StringTrimLeft(Binary($int), 2)
EndFuncFunc HexAdd($a, $b)
[/autoit] [autoit][/autoit] [autoit]
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
; etcMsgBox(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. -
VC++ optimiert zu gut.

Da letztendlich alle Ergebnisse wieder verworfen werden und der Rüchgabewert der eine Parameter ist, wird alles weggestrichen.
-
-
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. -
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.
-
Du könntest das AutoIt-Programm als Standartprogramm für diesen Dateityp eintragen und über das Skript dann Irfan View oder so starten.
-
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) -
Dein Programm hat meinen Windoof beinahe zum Absturz gebracht, als ich versucht hab, es ohne Adminrechte zu starten.
-
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.
-
Ü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()
[/autoit] [autoit][/autoit] [autoit]
$__xVideo_DLL = DllOpen("xVideo.dll")
EndFuncFunc _xVideo_UDF_Close()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
DllClose($__xVideo_DLL)
EndFunc; Constanten:
[/autoit] [autoit][/autoit] [autoit]
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]; Funktionen
[/autoit] [autoit][/autoit] [autoit]
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]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). -
Geht auch DIESE UDF?
Ansonsten sieht dar Code nicht so schwer aus. Ich glaube, man könnte daraus schnell eine UDF machen.
-
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.
-
-
-
erzeugt nur einen buffer und ist damit erstmal nicht so wichtig.
AF41 kann man so binär abspeichern:
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.
-
-
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.
-
-
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.
-
-
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
Alles anzeigen#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"); } -