doppelt gemoppelt hält besser, was?
...naja bevor er sich eine Read-Only Version der Klasse von Hand nachbaut... 😉
Gruss
tscherno
Hallo,
am besten du arbeitest mit einer gekloten Kopie.
Gruss
tscherno
Hallo,
eine weitere Lösung währe es alle Dateien in einem Zip-Container zu speichern, so wie es zum Beispiel in Spielen gemacht wird (Quake .pak files 😄). So hast du den Vorteil dass du einzelne Datein extrahieren kannst und als dreingabe ist das ganze auch noch komprimiert.
Gruss
tscherno
Hallo,
ich bezweifle dass die Lösung mit dem USB-Hub und der Festplatte funktionieren würde.
Man muss sich im klaren sein dass hier Gerätezugriffe stattfinden. Stellen wir uns vor dass Rechner A eine Datei haben will. Er weist den Treiber an eben diese zu lesen. Der Treiber wandelt das ganze in einen OpCode für den Festplattencontroller um der auf der Festplatte sitzt. Der Lese/Schreibkopf setzt sich in Bewegung, die Datei wird gelesen. Während des Schreibvorgangs kommt Rechner B. Er will eine Datei schreiben, er übergibt die Parameter an den Treiber und es kracht. Rechner B weis ja nicht das Rechner A da ist...
Jetzt kann alles mögliche passieren:
-Wenn die Programmierer bei Microsoft gut waren, wird der zweite Rechner die Platte am USB-Hub nicht mal erkennen. (davon gehe ich aus...)
-Es gibt einen Zugriffskonflikt der mit einem Bluescreen quittiert wird
-Die zwei Rechner streiten sich um den Lesekopf und korrumpieren dabei die Daten auf der Festplatte.
Irgendwo habe ich mal einen Treiber gesehen mit dem man per USB Dateien zwischen zwei Rechnern übertragen kann. Einfach googeln...
Gruss
tscherno
Hallo,
für IDA-Pro gibt es ein Plugin welches anscheinend erlaubt MIDL zu dekompilieren.
http://cgi.tenablesecurity.com/tenable/mida.php
Gruss
tscherno
Nachtrag:
Hier noch was:
http://forum.softpedia.com/index.php?showtopic=2378
Hallo,
ich finde es extrem nervig Benutzeroberflächen zu erstellen. Viel spannender finde ich es Klassenbibliotheken und Tools für andere Entwickler zu entwickeln.
Gruss
tscherno
Hallo,
Zum ersten Problem:
Console.WriteLine() ruft immer die ToString() Methode des übergebenen Objektes auf.
Zum zweiten Problem:
Einzelne zeichen werden in C# mit dem Datentyp char (System.Char) repräsentiert. Diese werden nicht in Anführungszeichen sondern in Hochkommata eingefasst.
Gruss
tscherno
Hallo,
ich denke nicht dass das so ohne weiteres geht. Den das würde heisen das umnanaged mit maneged Code statisch gelinkt wird. Ich würde eine Wrapper DLL in C schreiben, welche die Funktionen aus der lib zur Verfügung stellt. Diese kannst du dann mit P/Invoke aufrufen.
Gruss
tscherno
Hallo,
probiers mal so:
SerialPort sp = new SerialPort("COM1", 11000, Parity.None, 8, StopBits.One);
sp.Handshake = Handshake.XOnXOff;
Du musst aber den Namen des COM-Ports sowie die Baudrate anpassen. Und Handshake evtl. noch auf RequestToSendXOnXOff stellen falls die initialisierung von oben nicht klappt.
Gruss
tscherno
Hallo,
die Konsole wird nicht unterdrückt wenn du eine Windows-Anwenung erstellst und dann in den Projekt-Eigenschaften den Ausgabetyp auf Konsole stellst.
Edit:
Daraus kann man schließen das der Linker möglicherweise anders linken muss damit die Konsole angezeigt wird.
Gruss
tscherno
Ich glaube es sollte so aussehen:
ON Auftrag.Auftrag_ID = Kostenstelle.Kostenstelle_ID
Gruss
tscherno
Ahh... an das Interop Toolkit habe ich garnicht gedacht!
Interop UserControls allow you to host any .NET control on a Visual Basic 6 form as if it was a real ActiveX control. This means you can extend your existing Visual Basic 6 applications by taking advantage of the rich library of controls that .NET has to offer.
Sehr schön!
Hallo,
du könntest versuchen den ausgehenden IRC-Traffic mit Wireshark aufzuzeichnen, um zu sehen wie der IRC-Client so eine lange Message aussendet.
Gruss
tscherno
Hallo,
in dem RFC von IRC steht das die Nachrichtenlänge auf 510 Zeichen (inklusive Befehl) beschränkt ist.
Eine Lösung währe es die Bytefolge in mehrere Nachrichten aufzuteilen.
Gruss
tscherno
Hallo,
so weit ich weis ist ein Objekt schon bei der erstellung eine Referenz (ausser bei Wertetypen), undzwar auf den Heap.
Möglich ist die Unterscheidung zwischen Wertetypen und Referenztypen:
Object o = new object();
Type t = o.GetType();
t.IsValueType;
Gruss
tscherno
Hallo,
wenn ich dich richtig verstehe, benötigst du ein ActiveX (.ocx) Control welches in C# geschrieben ist. Das Funktioniert soweit ich weis nicht. Es gibt allerdings einen "Hack" in Form eines sog. "Shim-Control" (ActiveX Control welches eine .NET Umgebung hostet). Vieleicht hilft dir dass weiter.
Siehe:
http://blogs.msdn.com/craigskibo/archive/2003/09/30/51677.aspx
Gruss
tscherno
Die Compiler vom SDK findest du in deinem Windows Verzeichnis im Ordner Microsoft.NET\Framework\v3.5 (Für .NET 3.5). csc.exe für C# und vbc.exe für VB.NET.
Gruss
tscherno
Bei sowas darf man halt nicht vergessen das all die teuere Sicherheits-Software nichts nutzt wenn einer durchs Fenster klettert und den ganzen Server mitnimmt, oder ein altes Wasserohr über dem Serverraum im Keller einen Riss bekommt.
Gruss
tscherno
Hallo,
mich würde mal interessieren wie ihr mit "vorhersehbaren" Exceptions umgeht.
Benutzen wir mal das einfache Tachenrechner-Beispiel wo eine Division durch 0 auftreten kann. Nehmen wir an dass sich folgender Code in einer Library befindet, und der Fehler vom Entwickler somit nicht bei der Benutzereingabe abgefangen werden kann.
Lasst ihr die Exception "geschehen"...
try
{
erg=a/b;
}
catch(DivideByZeroException ex)
{...}
...oder werft ihr Sie vorher manuell?
if(b==0)
{
throw(new DivideByZeroException("Division durch 0!");
}
else
{
erg=a/b;
}
Ich habe mal einen kleinen Benchmark geschrieben welches die Zeit misst:
//Kompilieren als Release mit eingeschalteten Optimierungen unter .NET 2.0
using System;
using System.Diagnostics;
namespace TryVsThrow
{
class Program
{
static int a = 10;
static int b = 0;
static int erg = 0;
static void Main(string[] args)
{
Stopwatch stopThrow = new Stopwatch();
Stopwatch stopTry = new Stopwatch();
try
{
stopThrow.Start();
ThrowEx();
}
catch
{ }
finally
{
stopThrow.Stop();
}
try
{
stopTry.Start();
TryEx();
}
catch
{ }
finally
{
stopTry.Stop();
}
Console.WriteLine("Throw: {0} Ticks", stopThrow.ElapsedTicks);
Console.WriteLine("Try: {0} Ticks", stopTry.ElapsedTicks);
Console.ReadLine();
}
static void ThrowEx()
{
if (b == 0)
{
throw(new DivideByZeroException("Division durch 0!"));
}
else
{
erg=a/b;
}
}
static void TryEx()
{
try
{
erg = a / b;
}
catch(DivideByZeroException ex)
{
; ;
}
}
}
}
Throw: 1083726 Ticks
Try: 217947989 Ticks
Ein weiterer Vorteil Exceptions manuell zu werfen währe das ein auftreten lassen der Exception mit try möglicherweise das System destabilisieren könnte. Ein Nachteil ist meiner Meinung nach der unübersichtlichere Code.
Oder ist dieser Benchmark nicht aussagefähig? Was meint ihr dazu?
Gruss
tscherno
Er läuft über Sockets. So kann man z.b. ein Objekt in den Stream serialisieren und am anderen Ende wiede deserialisieren.
Gruss
tscherno
Hallo,
strings kann man mit Socket nicht senden. Nur byte[]. Du kannst auch einen NetworkStream verwenden. Der vorteil davon ist das du jede Klasse die von Stream erbt da "reinleiten" kannst.
Gruss
tscherno
Hallo,
müssen immer die aktuell Verfügbaren Daten in der ListBox angezeigt werden? Wenn nicht dann würde ich einen Cache implementieren der z.B. jede Sekunde seinen Inhalt in das Label / die ListBox leert.
Gruss
tscherno
Ja es ist halt ein Hack. Am besten das Value imemr mit NULL befüllen und nur mit den Keys arbeiten.
Gruss
tscherno
Hallo,
ab Framework 3.5 gibt es die System.Generic.HashSet<T> Klasse, die sich genau so verhält wie du geschrieben hast. Falls du unter 2.0 Entwickelst kannst du Dictionary<Key,Value> einsetzen. Diese Klasse wirft eine Exception wenn ein Key zweimal vorhanden ist. Ist aber zugegeben nicht die eleganteste Lösung.
Gruss
tscherno
Sega Megadrive: Die Sonic Reihe, Lotus Racing und LHX
Ich könnte mir in Arsch beissen das ich das Ding verschenkt habe als der erste Rechner kam! =)
Gruss
tscherno
Edit:
Ganz vergessen, ich hatte noche einen Dendy (Sovietischer NES Klon) und dort das game Battle City (Tank Batallion Klon) was mich süchtig machte. Ausserdem gabs da noch Duck Hunt welches mit einer Lightgun gespielt wurde.
Beschreibung:
Diese Methode untersucht ein Objekt per Reflection und liefert eine Liste von Attribute eines bestimmten types zurück welche die Eigenschaften des Objekts markieren.
public static List<T> GetPropertyAttributes<T>(object o) where T: Attribute
{
System.Reflection.PropertyInfo[] propinfos = o.GetType().GetProperties();
List<T> attriblist = new List<T>();
object[] tmp; //Temporäres Objekt
for (int i = 0; i < propinfos.Length; i++)
{
//Attribute aus allen Eigenschaften holen
for (int j = 0; j < propinfos[i].GetCustomAttributes(typeof(T), false).Length; j++)
{
tmp = propinfos[i].GetCustomAttributes(typeof(T), false);
for (int k = 0; k < tmp.Length; k++)
{
//Wenn der Typ Okay ist zur Liste hinzufügen
if (tmp[k] is T)
{
//Zurückgeliefertes Objekt-Array zurück zum Attribut casten
//und der Liste hinzufügen
attriblist.Add((T)tmp[k]);
}
else
{
//Wenn typ nicht stimmt,Ignorieren und Schleife fortsetzen
continue;
}
}
}
}
return attriblist;
}
Schlagwörter: Reflection Attribute auslesen generisch
Hallo,
hat dein Benutzer Debug-Rechte?
Systemsteuerung/Verwaltung/Lokale Sicherheitsrichtlinie/Lokale Richtlinien/Zuweisung von Benutzerrechten/Debuggen von Programmen
Gruss
tscherno
Hallo,
auch bei mir gab es keine Probleme. Der einzige Knackpunkt ist dass man mit 2008 erstellte .NET 2.0 Solutions nicht mit Visual Studio 2005 öffnen kann.
Gruss
tscherno
Hi,
du benötighst zusätzliche Ribbon-Steuerelemente von einem Drittanbieter. Da gibt es einige. Einfach mal googeln. Die Komponenten sind aber meistens Kostenpflichtig.
Gruss
tscherno
Ich tippe jetzt einfach mal das es irgendwo ein SDK gibt welches die benötigte DLL enthalten könnte. 😉
Gruss
tscherno
Das zu serialisierende Objekt (in deinem Code "g") muss einen parameterlosen Konstruktor besitzen. Ist das der Fall?
Gruss
tscherno
Hallo,
so geht es auch:
XmlSerializer xs = new XmlSerializer(liste.GetType());
xs.Serialize(stream,li);
"liste" ist vom Typ List<int>. Dann kann man sich das Dummy sparen.
Oder übersehe ich etwas?
Gruss
tscherno
würde mich aber trotzdem interessieren, warum Er auf die Count Eigenschaft schaut, anstatt Capacity.
Das ist eine Performancesache. Intern verwendet ArrayList ein Array welches bei bedarf in ein grösseres kopiert wird. Cpacity gibt die grösse dieses Arrays an.
Count gibt an wieviele Elemente tatsächlich in diesem Array enthalten sind.
Siehe:
http://msdn2.microsoft.com/en-us/library/system.collections.arraylist.capacity.aspx
Gruss
tscherno
Liegt vieleicht eine verwechslung zwischen Gradmaß und Bogenmaß vor?
Gruss
tscherno
DISCLAIMER:
Ich weis granicht ob dass in diesem zusammenhang relevant ist da ich keien Ahnung von Mathe habe, will aber darauf hinweisen das die Math Methoden alle Winkel im Bogenmaß erwarten. Wenn ich also schwachsinn schreibe dann bitte ignorieren. 😉
Bei ArrayList (und auch List<>) musst du mit den Methoden Add und Insert arbeiten.
Elements.Insert(0, new Bruchfeld(this, p));
Gruss
tscherno
Du musst das enthaltene Object zum Typ deines Interfaces casten, weil eine ArrayList alles als Objekt speichert und du somit nur zugriff auf die Member von Object hast.
((IMyInterface)MyArrayList[3]).InterfaceMethode();
Falls du unter .NET 2.0 oder höher arbeitest solltest für solche zwecke lieber die generische List aus dem Namensraum System.Collections.Generic verwenden.
Gruss
tscherno
Bei Mousedown einen Timer loslaufen lassen der nach 3000 Sekunden auslöst.
Gruss
tscherno
Also folgender Code gibt bei mir immer die richtigen Tasten auf der Konsole aus (auch Pfeiltasten):
for (; ; )
{
Console.WriteLine(Console.ReadKey(true).Key);
}
Ich habe 2005 und 2008 angekreuzt, wobei ich 2008 nur verwende um mich mit den neuen Technologien vertraut zu machen.
Gruss
tscherno
Die zu übertragende Klasse muss dem Server und dem Client-Assembly bekannt sein.
Gruss
tscherno
Hallo,
nehmen wir an du hast deine geheime Information Bitweise. z.b. 1010
Jetzt holst du dir z.b. von jedem Pixel den Blauanteil in einer Schleife. Angenommen du bekommst im ersten Durchlauf eine 255 in diesem fall ist das LSB bereits auf 1. Also kannst du weiter machen. Angenommen du bekommst wieder eine 255 das zweite Bit der geheimen Information ist 0. Also musst du den LSB hier auf 0 setzen (siehe oben).
So machst du weiter bis du die ganze geheime Information durch hast. Damit das auslesen funktioniert musst du irgendwo einen Wert speichern der angibt wie lange die geheime Information ist, oder irgendeine andere Markierugn setzen damit das Ausleseprogramm weis das hier die geheime Information zu ende ist.
Gruss
tscherno
Hallo,
könnte dieser Link vieleicht helfen?
http://msdn2.microsoft.com/en-us/library/ms797878.aspx
Dass währe dann allerdings ein Usermode-Treiber, was wiederrum ein Risiko darstellen könnte.
Gruss
tscherno
Die ganze Datei Bitweise einzulesen (was mit BitArray möglich währe) wird dich nicht weiterbringen da du dann ein Problem beim zurückschreiben haben wirst. Die Lösung stellen wie bereits gesagt die Bitoperatoren dar. Du kannst den LSB mit ihnen setzen.
Es gibt mehrere Möglichkeiten, ich habe es so gemacht:
1.) Das letzte Bit erstmal auf 0 setzen:
Das erreichst du mit einmal nach recht und einmal nach links schieben.
Anfangszustand: : //11111111 (255)
Rechts schieben: (>>): //01111111 (127)
Links schieben: (<<): //11111110 (254)
2.) Jetzt kannst du mit einer ODER-Verknüpfung das letzte Bit auf 1 setzen (byte ODER 1).
Wert: 11111110 (254)
Maske: 00000001 (1)
Ergeb: 11111111 (255)
1 ODER 0 = 1.
Siehe auch: http://de.wikipedia.org/wiki/Bitweiser_Operator
Gruss
tscherno
Ich habe System.Collections.BitArray und Bitoperatoren benutzt. Sicherlich währe das ganze auch nur mit Bitoperatoren lösbar und dann auch sicher um einiges schneller.
Gruss
tscherno
das halte ich für ein Gerücht.
Naja Photoshop verwendet es als Alphakanal, aber das ist AFAIK nicht standard.
Unserer Vorgabe war dass die Bilder in Paint auf visuelle unterschiede geprüft werden, deshalb haben wir uns darum nicht weiter gekümmert.
meinst du das, was unter Beschreibung des BMP-Formates / Farbpalette steht?
Nein, ich meinte eigentlich die verbleibenden 8-Bit bei einer 32-Bit Bitmap.
(siehe Wikipedia)
Der Nachteil bei diesem Vorgehen ist halt dass es bei Bitmaps mit kleinerer bpp nicht mehr funktioniert.
Gruss
tscherno
Hallo,
wir haben genau so ein Programm im Rahmen eines Schulprojekt programmieren müssen.
Informier dich erstmal darüber wie eine BMP Datei aufgebaut ist. Du wirst sehen das ein Byte pro Pixel immer ungenutzt ist. Dort kannst du deine Information verstecken. Das Problem ist aber das man die versteckte Information in einem Hex-Editor sofort sehen kann. Wir sind dann noch eine Stufe tiefer gegangen und haben unsere Informatio bitweise versteckt. Wenn man das niederwertigste Bit ändert ist dies vom menschlichen Auge kaum erkennbar.
Gruss
tscherno
System.IO.Ports.SerialPort ist eine Klasse um den seriellen Port (COM-Port) anzusprechen.
Gruss
tscherno