Laden...

Forenbeiträge von pdelvo Ingesamt 1.346 Beiträge

17.07.2009 - 15:49 Uhr

in der url einfach "javascript:history.back();" angeben.

zwichen java und script kommt kein leerzeichen. Die Forumssoftware macht da irgendwie einen rein.

Gruß pdelvo

17.07.2009 - 15:38 Uhr

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

15.07.2009 - 10:55 Uhr

Ich erzeuge IL code, wie der C# Compiler auch. Sie sind also nicht ohne .net Framework lauffähig.

Gruß pdelvo

13.07.2009 - 21:04 Uhr

Ich glaube ich nutze mal die Gunst der Stunde und presentiere meinen leeren Desktop( PC neu aufgesetzt 😁 )

Gruß pdelvo

13.07.2009 - 18:40 Uhr

Bin dem Team beigetreten.

Gruß pdelvo

13.07.2009 - 11:28 Uhr

Deine Methode funktioniert so nicht bei einer https Verbindung. Da fehlt noch

 string newUrl = url.ToString().Replace("https://", "https://www.");

Gruß pdelvo

12.07.2009 - 22:43 Uhr

Klasse Projekt.

Mein 4-Kerner steht zur Verfügung. Ich wäre dabei.

3 von vieren machen sowieso fast nur Mittagspause.

Gruß pdelvo

12.07.2009 - 12:15 Uhr

Ja. In erster inie mache ich das zum Üben.

Gruß pdelvo

11.07.2009 - 22:37 Uhr

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

11.07.2009 - 20:34 Uhr

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

11.07.2009 - 13:50 Uhr

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

11.07.2009 - 12:36 Uhr

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

10.07.2009 - 14:57 Uhr

Danke. Das kann ich gebrauchen.

Gruß pdelvo

09.07.2009 - 17:27 Uhr

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

09.07.2009 - 17:20 Uhr

Wie lautet der Fehler denn?

[Hinweis] Wie poste ich richtig? Punkt 5

Gruß pdelvo

09.07.2009 - 17:18 Uhr

Was sollte an meiner Lösung denn Endrekursiv sein?

Gruß pdelvo

09.07.2009 - 15:41 Uhr

So 12.000 verschachtelte klammern solltest du schon mit meiner methode hinbekommen.

Gruß pdelvo

09.07.2009 - 15:22 Uhr

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

09.07.2009 - 15:13 Uhr

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

07.07.2009 - 23:22 Uhr

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

07.07.2009 - 12:02 Uhr

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

07.07.2009 - 00:14 Uhr

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

06.07.2009 - 23:57 Uhr

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

06.07.2009 - 23:41 Uhr

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.

06.07.2009 - 23:20 Uhr

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

06.07.2009 - 18:22 Uhr

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

06.07.2009 - 13:52 Uhr

Ich habe gehofft, dass es einen schönen Parameter für ildasm.exe gibt. Aber so geht es natürlich auch.

Gruß pdelvo

06.07.2009 - 13:16 Uhr

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

06.07.2009 - 12:31 Uhr

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

05.07.2009 - 11:56 Uhr

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

03.07.2009 - 21:11 Uhr

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

30.06.2009 - 14:59 Uhr

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

29.06.2009 - 07:15 Uhr

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

28.06.2009 - 21:11 Uhr

Wenn zwei Spieler gleichzeitig gegen sich selber knallen, stirbt nur einer.

Gruß pdelvo

26.06.2009 - 16:53 Uhr

Oder in einem Timer immer wieder überprüfen lassen ob die Netzwerkkarte initialisiert ist.

Gruß pdelvo

26.06.2009 - 16:24 Uhr

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

25.06.2009 - 21:22 Uhr

Wenn du eine **Textur **laden willst ist content.Load<Model>("..."); falsch. Nimm da Texture2D.

Gruß pdelvo

19.06.2009 - 18:16 Uhr

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

19.06.2009 - 14:28 Uhr

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.

15.06.2009 - 15:44 Uhr

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

13.06.2009 - 19:05 Uhr

du kannst ja auf deiner masterpage prüfen, ob der user angemeldetet ist. und dann deinen provider updaten.

Gruß pdelvo

13.06.2009 - 16:00 Uhr

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

13.06.2009 - 12:59 Uhr

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

13.06.2009 - 12:54 Uhr

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

10.06.2009 - 18:14 Uhr

Ist da Contains nicht besser geeignet?

Gruß pdelvo

10.06.2009 - 17:26 Uhr

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

08.06.2009 - 18:58 Uhr

Mal so eine Frage. Was machst du wenn das .net framework 3.5 nicht installiert ist?

Gruß pdelvo

06.06.2009 - 18:09 Uhr

Du kannst nach den Levels gruppieren und dann mit Min(Max) den größten und kleinsten Wert herausbekommen.

Gruß pdelvo