in der url einfach "javascript:history.back();" angeben.
zwichen java und script kommt kein leerzeichen. Die Forumssoftware macht da irgendwie einen rein.
Gruß pdelvo
Ich habe an der SPrache weiterentwickelt und.
Ich habe es jetzt so gemacht, dass der Returnwert direkt hinter die Methode gehört. Außerdem funktionieren nurn einfach If abfragen. Außerdem gab es kleinere Bugfixes.
Hier mal mein Zwichenstand
Namespace Hallo
{
Class Program Public Static
{
Method void Do Public Static Params string a
{
System.Console::WriteLine(a);
}
Method int Main Public Static
{
var:int i = 5;
i = i + 6;
this::Do ("Hallo, Welt!");
var:string u = System.Console::ReadLine();
if( u == "Hallo")
{
System.Console::WriteLine("Hallo");
}
else
{
System.Console::WriteLine("Hi");
}
ret 0;
}
}
}
Wenn jemand Lust hat sich das anzusehen kann er sich bei mir melden.
Gruß pdelvo
Ich erzeuge IL code, wie der C# Compiler auch. Sie sind also nicht ohne .net Framework lauffähig.
Gruß pdelvo
Ich glaube ich nutze mal die Gunst der Stunde und presentiere meinen leeren Desktop( PC neu aufgesetzt 😁 )
Gruß pdelvo
Bin dem Team beigetreten.
Gruß pdelvo
Deine Methode funktioniert so nicht bei einer https Verbindung. Da fehlt noch
string newUrl = url.ToString().Replace("https://", "https://www.");
Gruß pdelvo
Klasse Projekt.
Mein 4-Kerner steht zur Verfügung. Ich wäre dabei.
3 von vieren machen sowieso fast nur Mittagspause.
Gruß pdelvo
Ja. In erster inie mache ich das zum Üben.
Gruß pdelvo
Ich find die Syntax ein wenig, hmm... seltsam.
Ich wollte nicht unbedingt alles aus c# kopieren. Das fände ich einfach zu langweilig.
Wie würde bei Methoden jetzt der Rückgabetyp angegeben werden?
Da habe ich auch schon eine lösung, die auch funktioniert, die ich aber selber nht ganz schön finde. Die wird noch geändert. Am besten ich schreibe hier mal eine größere Methode. Da sieht man mehr.
Method MacheIrgendwas Public Static Ret:System.ConsoleKeyInfo Params string a
{
System.Console::WriteLine(a);
ret System.Console::ReadKey();
}
Wie gesagt. Das Ret:[Typ] gefällt mir selber noch nicht.
Wie gibst du bei Klassen Interfaces und Basisklassen bei Vererbung an?
Da wollte ich wie in C# den Doppelpunkt verwenden. Das steht aber erstmal ganz hinten auf meiner Liste.
Wo würden dort eventuelle Modifier hinkommen?
Das var: gilt nur innerhalb einer Methode. Außerhalb werden Variablen nach dem Schema von Klasse deklariert. Das gibt es aber auch noch nicht.
Warum der Doppelpunkt dort?
Um var vom Typ zu trennen =)
Ob das alles so kommt wie ich Sage, steht aber noch nicht fest. Ich kann das ja ändern wie ich lustig bin 😁
Danke für deine Antwort.
Gruß pdelvo
Hi.
Ich habe wiedermal ein neues Projekt in Angriff genommen 😁
Diesmal ist es die Programmiersprache "PSharp2" (Es gab auch mal eine Version 1, die hat es aber nie an die öffentlichkeit geschafft).
Hier ist mal ein kleines Codebeispiel, an dem man erkennen kann, wie der Syntax ungefähr aussieht:
[color]Namespace [/COLOR]Hallo
{
[COLOR]Class[/COLOR][COLOR] Main [/COLOR][COLOR]Public Static[/COLOR]
{
[COLOR] Method [/COLOR][COLOR]Main[/COLOR][COLOR] Public Static[/COLOR]
{
[COLOR]var[/COLOR][COLOR]:[/COLOR][COLOR]string[/COLOR] i = [COLOR]"Hallo, Welt!"[/COLOR];
System.Console[COLOR]::[/COLOR]WriteLine(i);
System.Console[COLOR]::[/COLOR]ReadKey();
}
}
}
Mit diesem Thread möchte ich ein paar Leute werben, die mir als Tester helfen können. Da die ganze Sache aber noch ultra Buggy ist 🙁 , möchte ich meinen Compiler hier noch nicht veröffentlichen.
Bei Interesse kann man sich bei mir über Skype melden (Anzeigename pdelvo).
Ich habe auch mal einen Screenshoot angehangen.
Gruß pdelvo
Du solltest die Zeitaufwändige operation in einem zweiten thread auslagern und dabei am besten dem benutzer mit dem waitcursor und vieleicht noch einer progressbar anzeigen, dass was passiert. das ist tausendmal besser als die gui einfrieren zu lassen.
Gruß pdelvo
Du kannst doch nicht versuchen einfach an irgendeine Stelle im Speicher zu schreiben. Damit könntest du im Schlimmsten fall dein System zum Absturtz bringen. Glücklicherweise blockiert Windows solche Speicherzugriffe. Eine möglichkeit währe, eine Assembler dll zu erstellen. Dann kannst du den Rückgabewert nutzen.
Gruß pdelvo
Siehe hier [FAQ] Mit Forms eine Art Frameset einer Website nachbauen? (Navigation, Wizard, Assistent)
Gruß pdelvo
Danke. Das kann ich gebrauchen.
Gruß pdelvo
Ist aber nur ein Teil davon. Vorher habe ich den Code noch gescannt und damit in seine einzelteile zerlegt. hier ist der teil, der den code 'versteht':
private List<AstTree> ParseTokens(List<object> tokens,ref int pointer)
{
var tree = new List<AstTree>();
while (pointer < tokens.Count)
{
if (tokens[pointer].ToString() == "Namespace")
{
pointer++;
var names = new Namespace {Name = tokens[pointer].ToString()};
pointer++;
if (Tokens.CurvedBrackedOpen.CompareTo(tokens[pointer]) != 0)
{
throw new Exception("'{' expected");
}
pointer++;
names.Elements = ParseTokens(tokens, ref pointer);
tree.Add(names);
}
else if (tokens[pointer] is Tokens && Tokens.CurvedBrackedClosed.CompareTo(tokens[pointer]) == 0)
{
pointer++;
return tree;
}
else if (tokens[pointer].ToString() == "Class")
{
pointer++;
var classo = new Class { Name = tokens[pointer].ToString() };
pointer++;
while (!(tokens[pointer] is Tokens))
{
classo.Modifier = classo.Modifier | ParseModifier(tokens[pointer].ToString());
pointer++;
}
if (!(tokens[pointer] is Tokens) || Tokens.CurvedBrackedOpen.CompareTo(tokens[pointer]) != 0)
{
throw new Exception("'{' expected");
}
pointer++;
classo.Elements = ParseClassTokens(tokens, ref pointer);
tree.Add(classo);
}
}
return tree;
}
Gruß pdelvo
Was sollte an meiner Lösung denn Endrekursiv sein?
Gruß pdelvo
So 12.000 verschachtelte klammern solltest du schon mit meiner methode hinbekommen.
Gruß pdelvo
Ich hab das so gemacht, weil man dann sehr leicht eine baumstruktur erstellen kann. Das ist beim kompilieren praktisch.
Und ich glaube nicht, dass man mit solchen Texten arbeiten muss: Dies ( ist(eine(sehr(tief(verschachtelte(Klammer...))))))
Gruß pdelvo
Ich habs in einem kompiler rekursiv gelöst. bei einer öffnenden ruft er rekursiv die methode auf und bei einer schließenden geht er aus der Methode. Das hat sehr gut funktioniert.
Gruß pdelvo
Ich würde den Header und manuell generieren und in ein byte[] umwanndeln, und mit den Daten kombinieren. Ich habe auch mal den Fehler gemacht die Daten als string anzusehen. Bei einer normalen, nur auf text basierenden Webseite geht das zwar, aber nicht bei binärdaten.
Gruß pdelvo
Ich konnte den Code aführen ohne irgendeine Fehlermeldung. Er hat auch das gemacht, was er machen sollte. Seltsam.
So wie es hier erklärt ist: Webcast: Ein neuer Compiler in einer Stunde - Programmiersprachen bis zum Abwinken Ich habe Bernd Marquard auch angeschrieben und den Quellcode bekommen.
Gruß pdelvo
Ich finde, dass direkt IL zu erzeugen viel angenehmer ist. Da kann man einen AST(Abstract Syntax Tree) sehr gut umsetzen.
Ich habe zB eine Klasse SetVarExpression. Diese hat ein Property Specifier und ein Property vom Typ Expression, welches die rechte Seite vom Gleich Zeichen darstellt. Das kann ein Mthematischer Ausdruck, ein Methodenaufruf etc. sein. Mein Codegenerieren habe ich dann einen Baum. Diesen kann ich dann rekursiv abarbeiten. Wenn ich diese SetVarExpression erstelle, erstelle ich einfach die rechte Seite vom Gleich und dann setze ich die Variable.
Mein Codegenerator umfasst nur ca. 180 Zeilen und der kann Mathematiche Funtionen, Strings verketten, rechnen(Punkt vor Strich!), Variablen erstellen und zuweisen, Typumwandlungen(seit neustem 😄). Wenn ich aber versuchen würde, mir C# zusammenzubasteln, sähe dasn nicht nur sehr unprofessionell aus, sondern wäre höchstwahrscheinlich mehr Arbeit gewesen.
Ich bin mit meiner Lösung so zufrieden.
Gruß pdelvo
So ein Fortschritt.
Ich caste die Typen jetzt immer.
Ich mache am ende ein pop.
Der Reflector sagt mir nichtmehr, dass mein Code obfuscated ist 😁
Hoffe mal dass es jetzt geht. Sonst melde ich mich nochmal. Ich finde es aber immernoch komisch, dass bei mir alles funktioniert hat. 🤔
Mein IL:
.method privatescope static void Main() cil managed
{
.entrypoint
.maxstack 2
.locals init (
[0] object obj2,
[1] object obj3)
L_0000: ldstr "Hallo"
L_0005: stloc.0
L_0006: ldstr " Welt!"
L_000b: stloc.1
L_000c: ldloc.0
L_000d: castclass string
L_0012: ldloc.1
L_0013: castclass string
L_0018: call string [mscorlib]System.String::Concat(string, string)
L_001d: stloc.0
L_001e: ldloc.0
L_001f: castclass string
L_0024: call void [mscorlib]System.Console::WriteLine(string)
L_0029: call int32 [mscorlib]System.Console::Read()
L_002e: pop
L_002f: ret
}
Danke nochmal.
Gruß pdelvo
Ich schreibe eine Miniprogramiersprache. Die erzeugt im Codegenerator den il code. In diesem habe ich an einer Stelle geschlammt. Habs ausgebessert. Mein generierter Code ist nun wie folgt:
.method privatescope static void Main() cil managed
{
.entrypoint
.maxstack 2
.locals init (
[0] object obj2,
[1] object obj3)
L_0000: ldstr "Hallo"
L_0005: stloc.0
L_0006: ldstr " Welt!"
L_000b: stloc.1
L_000c: ldloc.0
L_000d: ldloc.1
L_000e: call string [mscorlib]System.String::Concat(string, string)
L_0013: stloc.0
L_0014: ldloc.0
L_0015: call void [mscorlib]System.Console::WriteLine(string)
L_001a: call int32 [mscorlib]System.Console::Read()
L_001f: ret
}
Hier ist mein Code, den ich kompiliere. An dem kann man sehen was er machen soll^^
var i = "Hallo";
var j = " Welt!";
i = System.String:Concat i j;
Write i;
Ich weiß, die Parameterübergabe ist bescheiden. Ich bau da noch ein Komma rein.
Ich muss das Programm morgen nochmal einem Freund schicken der es dann mal bei sich ausprobiert.
Danke für die Hilfe.
Gruß pdelvo
(Edit:
Das fiese ist, dass man solch IL-Code generieren kann, ohne dass jemand meckert. Man merkt die Fehler dann erst zu Laufzeit (wenn der generierte Code ausgeführt werden soll). [/color]
Ich weiß. Da vermisst man seinen schönen guten C# Compiler, der einem alles sofort ankreidet.
Hallo,
Ich habe ein paar Probleme, wenn ich eine mit Reflection.Emit erstellte Assembly an einen Freund sende, stürtzt diese immer ab. Auch wenn ich ihm meinenCompiler schicke und er sie auf seinem PC erstellt, funktioniert es nicht. Bei mir läuft aber alles eindandtfrei. Hier mal ein Beispielcode, der nur auf meinem Rechner läuft:
.method privatescope static void Main() cil managed
{
.entrypoint
.maxstack 4
.locals init (
[0] object obj2,
[1] object obj3)
L_0000: ldstr "Hallo"
L_0005: stloc.0
L_0006: ldloc.0
L_0007: ldstr " Welt!"
L_000c: stloc.1
L_000d: ldloc.1
L_000e: ldloc.0
L_000f: ldloc.1
L_0010: call string [mscorlib]System.String::Concat(string, string)
L_0015: stloc.0
L_0016: ldloc.0
L_0017: ldloc.0
L_0018: call void [mscorlib]System.Console::WriteLine(string)
L_001d: call int32 [mscorlib]System.Console::Read()
L_0022: ret
}
Ich benutze ein 64bit System. Ich glaube aber nicht, das es damit zusammenhängt, da ich meinen Compiler schon als 32bit Assembly kompiliere, und er auch 32bit Code hinten raus pustet.
Liegt es vieleicht an meinem il? Warum funktioniert es bei mir, aber bei anderen nicht?
Gruß pdelvo
Einmal. dann sollte sich die IDE im Idealfall repariert haben.
Sonst kannst du auch mal das 'Allheilmittel' ausprobieren. VS mit /resetsettings starten. Das bewirkt manchmal Wunder.
Gruß pdelvo
Ich habe gehofft, dass es einen schönen Parameter für ildasm.exe gibt. Aber so geht es natürlich auch.
Gruß pdelvo
Danke für den guten Tipp. Schade das es dafür nichts im Framework gibt. Ich versuche jetzt ildasm.exe zu bedienen, habe aber noch ein paar Probleme die Ausgabe richtig zu filtern. Ich bekomme immer zu viel angezeigt.
// Microsoft (R) .NET Framework IL Disassembler. Version 3.5.21022.8
// Copyright (c) Microsoft Corporation. All rights reserved.
// warning : THIS IS A PARTIAL DISASSEMBLY, NOT SUITABLE FOR RE-ASSEMBLING
.class private auto ansi Program
extends [mscorlib]System.Object
{
.method privatescope static void Main$PST06000001() cil managed
{
.entrypoint
// Code size 26 (0x1a)
.maxstack 2
.locals init (object V_0)
IL_0000: ldc.i4 0x5
IL_0005: stloc.0
IL_0006: ldloc.0
IL_0007: ldc.i4 0x2
IL_000c: rem
IL_000d: stloc.0
IL_000e: ldloc.0
IL_000f: call void [mscorlib]System.Console::WriteLine(int32)
IL_0014: call int32 [mscorlib]System.Console::Read()
IL_0019: ret
} // end of method Program::Main
} // end of class Program
// *********** DISASSEMBLY COMPLETE ***********************
Im Moment benutze ich diese Parameter: /item:Program::Main Result.exe /text
Weiß jemand wie ich den reinen ilcode bekomme, also
.entrypoint
// Code size 26 (0x1a)
.maxstack 2
.locals init (object V_0)
ldc.i4 0x5
stloc.0
ldloc.0
ldc.i4 0x2
rem
stloc.0
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
call int32 [mscorlib]System.Console::Read()
ret
???
Gruß pdelvo
Hallo!
Ich wollte mal fragen ob es möglich ist aus einer .net Assembly in meinem eigenen Programm den il Code auszulesen. Google war mir dabei keine große hilfe. Ich finde nur IL Tutoral. Der Hintergrund ist, dass ich eine Miniprogrammiersprache entwickelt habe und nun auch versuchen will, aus einem fertig compiliertem Programm den Quellcode zu reproduzieren. Das sollte mit il code kein Problem darstellen. Weiß jemand ob, und wenn ja, wie man dasmacht?
Danke schonmal im vorraus
Gruß pdelvo
Ich glaube nicht, dass das in C# so einfach geht. IMHO muss man dazu einen Netzwerktreiber schreiben, der sich dazwichenklinkt. Das einzige was mir jetzt so einfällt wäre, die Anwendung zu hooken.
Gruß pdelvo
Hallo,
Ich wollte mal Fragen, ob jemand eine Dokumentation zu den Schlüsselwörtern __reftype, __makeref, __arglist, __refvalue kennt. Die sind, wie ich finde, sehr spannend und praktisch.
Man kann zB mit __arglist variable Parameterlisten realisieren.
EDIT: Ich sehe gerade, dass diese so unbekannt sind, dass nicht mal der Reflektor sie kennt, und als Fehler ankreidet, obwohl es sich ohne Probleme kompilieren lässt.
Gruß pdelvo
Wenn du dir seinen Link richtig angesehen hättest, hättest du gesehen, dass dort direkt ein Beispiel erklärt wird.
Siehe [Hinweis] Wie poste ich richtig? 4b und c
Gruß pdelvo
Du kannst ja ein Programm schreiben, dass VNC unsichtbar macht. Das sollte dann doch für die meisten Schüler eine zu große Blockade sein.
Gruß pdelvo
Wenn zwei Spieler gleichzeitig gegen sich selber knallen, stirbt nur einer.
Gruß pdelvo
Oder in einem Timer immer wieder überprüfen lassen ob die Netzwerkkarte initialisiert ist.
Gruß pdelvo
Bei mir gibt es die gleichen Fehler, die ich auch oben schon genannt habe(1mb zu wenig ram, cpu geschwindigkeit falsch).
Dann hatte ich noch was vergessen. Es heißt doch Architektur und nicht rchidektur, oder 😁
Außerdem hat meine süsse kleine Ramdisk nach deinem Programm keine größe. Sie ist eigendlich 1gig groß.
Gruß pdelvo
Wenn du eine **Textur **laden willst ist content.Load<Model>("..."); falsch. Nimm da Texture2D.
Gruß pdelvo
Mir ist schon klar das er den runtertacktet. Das währen dann aber 3,2 / 9 * 6 und das ergibt ca 2,13 und nicht 1,59. Das währe beim Standardtackt richtig. Außerdem steht da auch zwei Einträge tiefer Ma
@Kaji Das komische ist nur, dass jedes andere Programm, das ich teste, den Arbeitsspeicher richtig anzeigt:
Property Value
Physical Memory 8192 MB Total, 3031 MB Free
Gruß pdelvo
Cooles Teil.
Ich habe aber zwei kleine Fehler gefunden.(Siehe Bild)
Ich habe 8gig Ram, also 8192mb und nicht 8191. Da solltest du nochmal gucken. Dann noch ein größerer beim Prozessor. Ich habe ihn übertaktet und dadurch 3,2ghz. Das wird falsch abgezeigt. Es ist aber sonst richtig. Der Multiplikator setzt sich von 9 auf 6 runter. Wenn ich ihn also nicht übertaktet hätte, währe die aktuelle Geschwindigkeit richtig.
Aber trotzdem ein krasses Teil.
Gruß pdelvo
PS: Ich fände es besser wenn du in eine normale Textdatei exportieren würdest.
Gruß pdelvo
Response.Redirect("...");
Und noch was.
ds.Login.Rows[0]["groupID"].ToString() == "3"
Ist Unsinn. Besser ist:
(int)ds.Login.Rows[0]["groupID"] == 3
Gruß pdelvo
du kannst ja auf deiner masterpage prüfen, ob der user angemeldetet ist. und dann deinen provider updaten.
Gruß pdelvo
Du kannst eine Tabelle anlegen Users_Online. In diese kommt dann die userID, und die Letzte Aktivität. Du überprüfst dann, ob die aktuelle Zeit - der letzten Aktivität einen Schwellwert überschreiet. bsp 15minuten. Wenn dies so ist, ist der user offline und kann aus der Tabelle entfernt werden. Dann brauchst du die Einträge einfach nur zählen.
Gruß pdelvo
Sieht klasse aus 👍
Es gibt nur einen Fehler. Wenn man das Spiel maximiert dann gibt es probleme beim neuzeichnen. Du solltest dann Invalide aufrufen. Sonst werden manche teile nicht neu gezeichnet.
Gruß pdelvo
Du kannst ja einen PointF nehmen. Dieser rechnet mit floats. Diese haben eine genauigkeit von 9 Stellen. Dann brauchst du dir da keine Sorgen zu machen. Du hättest dann für jedes Raster 3,666666666. Das sollte doch genau genug sein.
Gruß pdelvo
Ist da Contains nicht besser geeignet?
Gruß pdelvo
Es wird aber kein Handle(IntPtr) erzeugt. Das passiert erst wenn die Form angezeigt wurde.
Packe das einfach in einen Shown Event Handler. Dann sollte das funzen.
Gruß pdelvo
Mal so eine Frage. Was machst du wenn das .net framework 3.5 nicht installiert ist?
Gruß pdelvo
Du kannst nach den Levels gruppieren und dann mit Min(Max) den größten und kleinsten Wert herausbekommen.
Gruß pdelvo