Hallo,
du kannst TextBoxen genauso in einem Array oder eienr Liste verwenden wie die primitiven Datentypen (int, double..).
TextBox[] boxen = new TextBox[10]; //Array für 10 TextBoxen
List<TextBox> boxen = new List<TextBox>(); //TextBox Liste
Gruss
tscherno
Hallo,
this.DeinEvent=null;
Das geht allerdings nur innerhalb der Klasse welche das Event bereitstellt (this).
...ohne dass ich jetzt weiß welche hinzugefügt worden sind?
Was du nicht weißt mach dich nicht heiß! 😉
Von aussen gibt es so weit ich weiß keine Möglichkeit. Das ist eigentlich auch logisch, weil es eine Verletzung der Kapselung währe. Andere Programmteile auf die du keinen Einfluss hast könnten ja das Event verwenden. Durch das Entfernen aller Eventhandler könntest du diese Programmteile in einen undefinierten Zustand versetzen.
Gruss
tscherno
Hallo,
Ich muss also Pixel für Pixel transformieren, oder einen gratis Encoder (wie libjpeg für linux) finden.
Eine Pixeltransformation sollte möglich sein, allerdings verlierst du dann die Kompressionsfeatures und könntest gleich BMP verwenden. JPEG verwendet das Dateiformat JFIF. Vieleicht hilft es dir irgendwie weiter...
Gruss
tscherno
Hallo,
probier auch mal das Attribut so zu setzen:
[DllImport("blub.dll",EntryPoint="BoxProperties",CallingConvention=CallingConvention.Cdecl)]
Sonst weis die Runtime garnicht welche Funktion Sie aus der DLL verwenden soll.
Edit:
Wenn du den Code von Andreas.May verwendest, musst du CallingConvention auf StdCall setzen.
Edit2:
Oh Sorry, habe das mit dem LoaderLock überlesen...
Gruss
tscherno
Hallo,
um ein byte[] in ein double zu konvertieren brauchst du die BitConverter Klasse.
So müsste es gehen: (nicht getestet!)
const int DOUBLE_BYTE_SIZE = 8;
double[] data = new double[((int)view.Length)/DOUBLE_BYTE_SIZE]; //enthält am ende die Daten
int byte_pointer = 0; //Zeigt auf das erste byte des aktuellen doubles
int data_pointer = 0; //Zeigt auf das nächste leere Feld im double Array
byte[] temp= new byte[8]; //Speichert das aktuell double in byte
while (byte_pointer < view.Length - DOUBLE_BYTE_SIZE)
{
view.Read(temp, byte_pointer, DOUBLE_BYTE_SIZE); //8 byte aus dem stream lesen...
data[data_pointer]=BitConverter.ToDouble(temp); //In double umwandeln
data_pointer++; //Zum nächsten leeren Feld im double array gehen
byte_pointer = byte_pointer + DOUBLE_BYTE_SIZE; //Zum Anfang der nächsten 8 byte im Memfile gehen
}
Gruss
tscherno
Hallo,
ich glaube da hat sich bei der Beschreibung von Amazon ein Fehler eingeschlichen:
Über das Produkt
"C" stellt ein ausführliches und verständliches Tutorial und Referenzwerk dar, mit dem Sie einen leichten Einstieg in die Programmiersprache C finden. Dabei wird nicht nur auf das .NET Framework von Microsoft eingegangen, alle Beispiele liegen auch in für Mono angepassten Versionen vor, so dass Sie auch unter Linux problemlos für .NET entwickeln können. Zudem deckt dieser "guide to C" auch bereits die Erweiterungen von C 2.0 wie beispielsweise Generics ab, so dass Sie auch für die Zukunft gut gerüstet sind.
Weiterführende Themen rund um das .NET-Framework - wie Datenbankanbindung, XML und Netzwerkzugriff -, die Architektur von Anwendungen und Richlinien für guten Programmierstil in Form eines Styleguides machen "C" zu einem unentbehrlichen Nachschlagewerk für Ihre weitere Programmierpraxis.
Gruss
tscherno
Hallo,
//ASCIIZeichen
public string character;
//Hint
public string hint;
Öffentliche Felder sollten nicht verwendet werden. Ersetze diese durch Eigenschaften.
CreateFont: //Marke setzen
try
{
//Font mit Style hinter aktuellem Styleindex erzeugen
font = new Font(name, size, (FontStyle)styles[styleindex]);
}
//wenn es knallen sollte, weil diese Schriftart diesen Style nicht unterstützt
catch (ArgumentException)
{
//setzen wir den Styleindex um eins hoch
styleindex++;
//und lassen das Spiel von vorne beginnen
goto CreateFont;
}
1.) Goto sollte man nicht verwenden. (while-Schleife wenn möglich)
2.) Hier wird IMHO try/catch zum steuern des Programmflusses eingesetzt.
Versuche den "Knall" vorher auszuschließen. Dass selbe gilt für Zeile 76 bis 92 in
sfx.ASCIIChart.Connect. Hier sollte versucht werden eine andere Lösung zu finden.
Mehr dazu hier.
Natürlich habe ich den Code jetzt nur überflogen und sicherlich nicht bis ins letzte Detail analysiert und verstanden. Möglicherweise hast du berechtigte Gründe die Sachen so zu Lösen. Ich habe auch keinen blas
sen Schimmer von Add-In Entwicklung.
Ansonsten sieht der Code sehr gut aus, und ist ungewohnt gut dokumentiert.
Gruss
tscherno
Hallo,
dir wird wohl nichts anderes übrigen bleiben als auf eine Library eines Drittherstellers zurückzugreifen. Diese bietet AFAIK allerdings auch nur einen Wrapper um die native Windows Mobile API an. Könntest ja probieren selber etwas in die Richtung zu entwickeln.
Gruss
tscherno
Hallo,
sieh dir mal in den Projekteigenschaften von Visual Studio die Build Events (Build Ereignisse) an. Dort kannst du festlegen, was vor und nach den Build passieren soll. Von dort aus müsste man auch ein Batch-Skript starten können welches die kompilierte Datei umbenennt.
Gruss
tscherno
Hallo,
sieh dir mal die Präprozessordirektiven an. Hier noch eine ausführlichere Erklärung.
Gruss
tscherno
Hallo svenson,
Die entsprechende Klasse heisst übrigens SslStream und nicht CryptoStream. Leider im CF nicht verfügbar.
Cool, wusste nicht dass es die gibt. Dann ist es natürlich sinniger diese Klasse zu verwenden. Ich hätte jetzt einfach einen CryptoStream durch einen NetworkStream getunnelt. So könnte man ja dann evtl. auch im CF verfahren...
Gruss
tscherno
Hallo,
es ist per Reflection möglich den Konstruktor nochmal aufzurufen. Aber in 99% der Fälle ist meiner Meinung nach irgendetwas am Design faul wenn man sowas verwenden muss.
Hab hier mal schnell was zusammengehackt:
using System;
using System.Reflection;
class Test
{
public Test()
{
Console.WriteLine("Default Constructor called!");
}
public Test(string message)
{
Console.WriteLine("Constructor was called with message: {0}", message);
}
}
class Program
{
static void Main(string[] args)
{
Test tc = new Test();
Type typeinfo = tc.GetType();
ConstructorInfo[] constructors = typeinfo.GetConstructors();
constructors[0].Invoke(null); //Parameterlosen Konstruktor aufrufen;
/** Konstruktor mit einem String als Prameter, aufrufen **/
object[] ctor_params = new object[1] { "Hallo Welt!" };
constructors[1].Invoke(ctor_params);
Console.ReadLine();
}
}
Ausserdem sollte man vermeiden diese Methode bei Objekten anzuwenden die man nicht selber geschrieben hat. Ein erneuter Aufruf des Konstruktors versetzt das Objekt möglicherweise in einen undefinierten Zustand.
Gruss
tscherno
Hallo pezi179,
ergänzend zu dem Post von ikaros will ich auf http://de.wikipedia.org/wiki/X.509 und den Namespace System.Security.Cryptography.X509Certificates hinweisen. Die Clients würden dann ein X.509-Zertifikat haben und sich beim Server authentifizieren. Nach erfolgereicher authentifizierung erlaubt der Server dann eine Verbindung über einen CryptoStream oder einen verschlüsselten Remoting-Kanal. Letzteres ist nur in einem LAN vernüftig einsetzbar.
Zu Kerberos:
Wenn ich richtig verstanden habe wird Kerberos auch automatisch bei einem Remoting-Kanal eingesetzt, wenn man ensureSecurity und impersonate auf true setzt (Siehe Remoting-Helfer).
Das Problem bei Kerberos ist aber dass man ein Key Destribution Center d.h. einen Windows 2003 oder Samba Domain-Controller benötigt.
Ausserdem müssen alle beteiligten User Mitglied in der Domäne sein. Wenn du über so eine Infrastruktur verfügst, dann nutze Sie, ansonsten würde ich mir CryptoStream in Kombination mit X.509 ansehen, oder falls Authentifizierung nicht so wichtig ist, auch ohne X.509.
Gruss
tscherno
Hallo Jack_Al,
in dem Code den SunboX gepostet hat, wird der Initialisierungsvektor zufällig erstellt. Das ist nötig um bei gleichem Klartext, unterschiedliche verschlüsselte Texte zu bekommen. Beim entschlüsseln muss natürlich der selbe IV angegeben werden, der beim verschlüsseln verwendet wurde.
Des Weiteren benutzt das Script leider Rijndael im Modus ECB, während mein C#-Rijndael im Modus CBC ist.
Die Klasse RijandaelManaged hat eine Eigenschaft "Mode", mit der kannst du auf ECB umstellen. ECB ist viel unsicherer, weil Blockweise verschlüsselt wird. (mehr dazu hier.)
Zu dem Datentyp-Problem:
In C hat ein char 127 bzw 255 byte (uchar) in C# dagegen 2 (wegen Unicode-Support). Mir ist bewusst das es in PHP kein byte gibt, aber es könnte helfen wenn du auf PHP-Seite ebenfalls mit den Byte-Werten arbeitest.
Gruss
tscherno
Hallo,
ich kenne mich mit PHP und Verschlüsselung nicht so gut aus, aber gibt es dort eine Möglichkeit dort mit byte-Arrays statt mit Strings zu arbeiten?
Ich könnte mir nähmlich vorstellen dass Informationen beim hin und her konvertieren zu String verloren gehen, weil diese intern möglicherweise anders gespeichert werden.
Gruss
tscherno
Hallo,
ich habe dieses Emoticon das erstemal im Battlenet in Diablo 2 gesehen. Ich verwende es als abgeschwächte Form von 😉. Oder auch wie es YpsilonZet beschrieben hat.
Gruss
tscherno
Hallo,
aber statische Klassen war m.E. eine Neuerung von C# 3.0
Seit 2.0.
Gruss
tscherno
Hallo Golo,
ein gutes Beispiel sind meiner Meinung nach Threads. Diese sind mit dem Betriebssystem und seinem momentanen Zustand so verzahnt, dass eine deserialisieren nicht möglich währe.
Edit:
Ich denke andere Objekt sind nicht serialisierbar, um ineffizientes programmieren zu verhinden. Das beste Beispiel sind Controls. Wenn das ginge, würde es sich manch einer einfach machen, und ganze Formulare über einen NetworkStream senden.
Gruss
tscherno
Hallo,
der austausch der DLL würde erschwert werden, wenn du diese signierst (Strong Name). Das zu schützende Programm lädt dann nur die signierte DLL. Zwar könnte man dass Programm immernoch Patchen, damit es unsignierte DLLs lädt, aber es währe immerhin eine weitere Barriere.
Gruss
tscherno
Hmmh,
vieleicht suchst du sowas wie einen Callgraph. Schau dir mal die Add-Ins für Reflector an, allem voran Graph und SequenzViz. Wenn es was kosten darf, dann vieleicht noch VTune. Der kann ebenfalls Aufrufdiagramme erstellen.
Gruss
tscherno
Hallo,
für sowas genügt meiner Meinung nach ein UML-Diagramm und die XML-Doc (eingeleitet mit ///), welche die Member der Klassen beschreibt. Eventuell noch eine A4-Seite die grob beschreibt wie das ganze zusammenhängt und funktioniert.
Gruss
tscherno
Hallo squadwuschel,
ich sehe eigentlich nur zwei Gründe die gegen dass speichern von Dokumenten in der DB sprechen undzwar der grössere Ressourceverbrauch und die (minimal) geringere Geschwindigkeit.
Ansosten hat die Filesystem-Lösung nur Nachteile, vorallem was die Konsistzenz der Daten angeht. Stell dir mal vor jemand verschiebt Daten oder fügt neue hinzu ohne die DB-Einträge zu aktualisieren, oder du willst auf einen neuen Fileserver migrieren: Da wünsche ich schonmal viel Spass bei der synchronisation zwischen DB und Dateisystem. 👅
Instinktiv würde ich sagen: Viele kleine Dateien in die Datenbank, wenige grosse ins Dateisystem.
Hier ist noch eine Diskussion dazu:
http://www.mail-archive.com/struts-user@jakarta.apache.org/msg18799.html
Teil2: http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19304.html
Gruss
tscherno
Hallo,
du benutzt den ADO.NET Treiber für den Microsoft SQL-Server. Du musst dir von der MySql Seite den Connector für MySql runterladen und in dein Projekt einbinden.
Gruss
tscherno
Hallo,
fast so zeitlos wie die Bibel sind imho die Bänder aus der Reihe "The Art of Computer Programming" von Donald E. Knuth, erschienen bei Addison-Wesley.
Die Darstellung der Beispielprogramme erfolgt dabei in einer von Knuth entwickelten Assemblersprache für einen von ihm entwickelten fiktiven „idealen“ Computer namens MIX [...], Er verwendet die Assembler-Sprache MIXAL (MIX-Assembler-Language). Knuth begründet den radikalen Schritt der Benutzung einer eigenen Assemblersprache [...] mit der Absicht, ein langfristiges Werk zu schaffen, das nicht von der jeweiligen Modeprogrammiersprache beeinflusst sein soll.
Gruss
tscherno
Hallo,
wenn dein Programm nicht auf externe Dateien zugreift, dürfte es genügen den Compiler auf "Release" zu stellen. Das kannst du im Visual Studio in der Dropdownbox oben in der Symbolleiste machen. Danach wird im bin Ordner ein "Release" Ordner erstellt, der die exe enthält.
Gruss
tscherno
Hallo,
im Prinzip schon. Zumindest wenn Sie sauber geschrieben wurde. (Threadübegriffe etc.)
Gruss
tscherno
Oh mein Gott, und ich habe versucht ein Programm zu schreiben welches den IL-Code aus dem MethodBody herauskopiert, die NOPs entfernt und dann per AssemblyBuilder ein neues Assembly erzeugt. Mir ist es aber nicht gelungen den EntryPoint richtig zu setzen.
Naja, dafür habe ich sehr viel über AssemblyBuilder gelernt 😁
ldc.i4.7 <- ist dass die Zeile?
Gute Nacht
tscherno
Hallo,
beim lesen von diesem Thread kam mir die Idee ein HackMe zu schreiben.
Mission zu HackMe.exe (Mission Impossible Musik im Hintergrund)
1.) Durch die Passwortkontrolle kommen.
2.) Im Code der den geheimen Text ausgibt, wird eine Variable deklariert welche
wichtige Informationen enthält. Besorgen Sie sich den Inhalt dieser Variable.*Regeln**
+Jeder Weg der zum Ziel führt ist erlaubt. Sei kreativ!
*Hinweise*
+Bei eingabe des richtigen Passworts gibt das Programm eine Meldung auf der Konsole
aus und schließt sich sofort wieder.
+Bei falschem Passwort schließt sich dass Programm sofort wieder.
+Bruteforce ist zum lösen der Aufgabe nicht erforderlich.Viel Erfolg!
Gruss
tscherno
PS: Wer es schafft soll die Lösung und seine Vorgehensweise bitte hier posten!
Hallo,
wenn du auf dieser Seite zu Inheritance Hirarchy runterscrollst findest du eine ganze Menge. Ich weis aber nicht ob dass alle sind.
Gruss
tscherno
Hallo,
verwende aufjedenfall ein normales Array statt List<> oder übergib List<> im Konstruktor die erwartete maximalgrösse der Liste ( z.b. 40.0000). Wenn die List voll ist wird nähmlich intern das ganze Array in ein doppelt so grosses Array kopiert. Desweiteren ist eine normale for-Schleife schneller als eine foreach.
Das dürft die Anwendung etwas beschleunigen.
Ich denke dass Problem liegt aber wahrscheinlich eher im Algorithmus. Kann dazu aber leider nicht mehr sagen weil ich mich auf diesem Gebiet überhaupt nicht auskenne.
Gruss
tscherno
Hallo slickwilly2000,
könnten dir evtl. die Events unter Microsoft.Win32.SystemEvents helfen?
Insbesondere EventsThreadShutdown und SessionEnded?
Gruss
tscherno
Hallo,
noch einfacher geht es so:
byte mybyte=123;
string binary = Convert.ToString(mybyte,2);
Gruss
tscherno
Hallo,
kennt jemand ein Plug-In mit dem man in Visual Studio IL-Code schreiben und Debuggen kann? Sowas gibt es ja bei MonoDevelop, nur würde ich mir ungerne noch eine IDE installieren.
Gruss
tscherno
Beschreibung:
Diese Konsolenanwendung interpretiert ein Brainfuck-Programm welches als Parameter übergen werden muss.
/*
* bint - Brainfuck Interpreter
* Implements wrap-around for cells (if 255 is increased it becomes 0 and vice-versa)
*
*/
using System;
using System.IO;
namespace bint
{
class Program
{
const short TAPE_SIZE=30000;
static string program_code; //The Programcode is saved here
static byte[] tape = new byte[TAPE_SIZE]; //Represents the Memory
static short ptr = 0; //Memorypointer
static short loop_ptr = 0; //looppointer
static void Main(string[] args)
{
//***Programfile is passed by arg***
//Check if any arguments where passed at all
if (args.Length == 0)
{
PrintHelp();
return;
}
else
{
//Check if passed file exists
if (!File.Exists(args[0]))
{
PrintHelp();
Console.WriteLine();
PrintError("IO_ERROR: Passed programfile not found!");
return;
}
else
{ //Read passed programfile
program_code = File.ReadAllText(args[0]);
//Execute Program
//ip = instruction pointer
for (int ip = 0; ip < program_code.Length; ip++)
{
switch (program_code[ip])
{
case '+': //Increase value at pointer
{
//Implement "Wrap-Around"
if (tape[ptr] == byte.MaxValue)
{
tape[ptr] = byte.MinValue;
}
else
{
tape[ptr]++;
}
break;
}
case '-': //Decrease value at pointer
{
//Implement "Wrap-Around"
if (tape[ptr] == byte.MinValue)
{
tape[ptr] = byte.MaxValue;
}
else
{
tape[ptr]--;
}
break;
}
case '>': //Increase pointer
{
if (ptr == TAPE_SIZE)
{
PrintError("RUNTIME_ERROR: End of Tape.");
return;
}
ptr++;
break;
}
case '<': //Decrease pointer
{
if (ptr == 0)
{
PrintError("RUNTIME_ERROR: Pointer was decreased at Position 0.");
return;
}
ptr--;
break;
}
case '[': //jump forward to the command after the corresponding ] if the byte at the pointer is zero.
{
if (tape[ptr] == 0)
{
ip++;
while (loop_ptr > 0 || program_code[ip] != ']')
{
if (program_code[ip] == '[')
{
loop_ptr++;
}
if (program_code[ip] == ']')
{
loop_ptr--;
}
ip++;
}
}
break;
}
case ']':
{
ip--;
while (loop_ptr > 0 || program_code[ip] != '[')
{
if (program_code[ip] == ']')
{
loop_ptr++;
}
if (program_code[ip] == '[')
{
loop_ptr--;
}
ip--;
}
ip--;
break;
}
case '.': //Print value at pointer
{
Console.Write(Convert.ToChar(tape[ptr]));
Console.Out.Flush();
break;
}
case ',': //Read value from Console and store it at pointer
{
tape[ptr]=Convert.ToByte(Console.Read());
break;
}
default:
{
//Discard all other characters
break;
}
}
}
}
}
}
static void PrintError(string errorMessage)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(errorMessage);
Console.ForegroundColor = ConsoleColor.Gray;
}
static void PrintHelp()
{
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Brainfuck Interpreter");
Console.WriteLine();
Console.WriteLine("USAGE: bint [Programfile]");
}
}
}
Schlagwörter: Brainfuck Interpreter BF
Hallo,
leider gibt es keine andere Möglichkeit, du musst die zweite Datei einlesen.
Der performenteste Weg währe imho mit zwei Streams (BinaryReader und BinaryWriter) zu arbeiten. Wobei der Writer die Zieldatei ist und der Reader den Inhalt aus den einzelnen Dateien liefert.
Soweit ich weis hält der Stream nicht die ganze Datei im Speicher sondern nur den teil in der nähe von Position. Weis jemand mehr darüber?
Gruss
tscherno
Hallo,
falls du funktionierende C/C++ beispiele hast, könntest du probieren einen Wrapper in C++/CLI zu schreiben.
Gruss
tscherno
Hallo,
mit CancelAsync() müsstest du den Vorgang abbrechen können.
Gruss
tscherno
Hallo,
das liegt dann daran dass .avi eigentlich ein Containerformat ist und z.b. DivX,XVID,MPEG4,DV [...] streams enthalten kann die wiederrum eigene Header haben.
Gruss
tscherno
Hallo,
hier noch - leider etwas verspätet - der Link zur Quelle. (Sorry, hab nicht mehr dran gedacht...)
http://www.pluralsight.com/blogs/mike/archive/2006/09/25/38697.aspx
Gruss
tscherno
Hallo,
hab auch noch was. Ist aber nicht von mir, bin mal zufällig darauf gestossen. Wenn es jemand rausfindet (ohne es zu kompilieren) dann ist er gut. 😁 (nicht Schummeln!)
Was macht dieses Programm?
using System;
using IAR = System.IAsyncResult;
using IE1 = System.Collections.IEnumerable;
using IE2 = System.Collections.IEnumerator;
using MRE = System.Threading.ManualResetEvent;
using PTS = System.Threading.ParameterizedThreadStart;
class P
{
static void Main()
{
MRE fe = new MRE(false);
MRE pe = fe;
foreach( char c in new MSG() )
{
MRE ce = new MRE(false);
PTS m = delegate(object s) { P p = (P)s; p.W.WaitOne(); Console.Write(p.C); p.G.Set(); };
m.BeginInvoke(new P(c, pe, ce), delegate(IAR ar) { ((PTS)ar.AsyncState).EndInvoke(ar); }, m);
pe = ce;
}
fe.Set();
pe.WaitOne();
Console.WriteLine();
}
public P(char c, MRE w, MRE g) { C = c; W = w; G = g; }
char C;
MRE W;
MRE G;
class MSG : IE1
{
public IE2 GetEnumerator()
{
int i = 0;
foreach (char ch in new NTE<SM.B>()) yield return (i++ == 0 ? char.ToUpper(ch) : ch);
yield return (',');
yield return (' ');
foreach (char ch in new NTE<SM.A>()) yield return (ch);
yield return ('!');
}
}
class NTE<PT> : IE1
{
public IE2 GetEnumerator()
{
foreach (Type t in typeof(PT).GetNestedTypes()) { yield return t.Name[t.Name.Length - 1]; }
}
}
class SM
{
internal struct A
{
public struct cow { }
public class too { }
public interface car { }
public enum will { }
public struct pad { }
}
internal class B
{
public class wish { }
public struct see { }
public interface hill { }
public enum ball { }
public class boo { }
}
}
}
Ich poste morgen die Quelle.
Gruss
tscherno
Hallo,
wegen den Lambda-Ausdrücken?
Gruss
tscherno
Hallo,
hast du schon probiert mit einem normalen SCP-Client wie WinSCP zu verbinden?
Gruss
tscherno
Hallo,
probier mal einen HRESULT mitzugeben. (Parameter errorCode im Konstruktor). Vieleicht erwartet VB da irgendwas.
Gruss
tscherno
Hallo doudi,
bitte sowas selber in der Doku nachsehen. (Google nach ArgumentException)
Die Ausnahme, die ausgelöst wird, wenn eines der Argumente für eine Methode ungültig ist. ArgumentException-Klasse
Argument ist ein anderes Wort für Parameter.
Gruss
tscherno