Laden...
Avatar #avatar-2584.gif
tscherno myCSharp.de - Member
Staatlich geprüfter Technischer Assistent für Informatik Nürnberger Land Dabei seit 29.04.2007 630 Beiträge
Benutzerbeschreibung

Forenbeiträge von tscherno Ingesamt 630 Beiträge

22.02.2008 - 00:13 Uhr

doppelt gemoppelt hält besser, was?

...naja bevor er sich eine Read-Only Version der Klasse von Hand nachbaut... 😉

Gruss
tscherno

21.02.2008 - 20:53 Uhr

Hallo,

am besten du arbeitest mit einer gekloten Kopie.

Gruss
tscherno

21.02.2008 - 20:12 Uhr

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

21.02.2008 - 20:02 Uhr

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

19.02.2008 - 20:50 Uhr

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

17.02.2008 - 12:58 Uhr

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

16.02.2008 - 20:25 Uhr

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

16.02.2008 - 20:07 Uhr

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

11.02.2008 - 23:08 Uhr

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

10.02.2008 - 21:55 Uhr

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

07.02.2008 - 18:24 Uhr

Ich glaube es sollte so aussehen:

ON Auftrag.Auftrag_ID = Kostenstelle.Kostenstelle_ID

Gruss
tscherno

07.02.2008 - 16:48 Uhr

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!

07.02.2008 - 00:35 Uhr

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

06.02.2008 - 18:44 Uhr

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

06.02.2008 - 18:30 Uhr

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

06.02.2008 - 15:46 Uhr

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

06.02.2008 - 15:24 Uhr

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

04.02.2008 - 18:08 Uhr

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

04.02.2008 - 15:14 Uhr

Hallo,

eventuell könnte dir das IT-Grundschutz Handbuch vom BSI helfen.

Gruss
tscherno

28.01.2008 - 21:31 Uhr

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

27.01.2008 - 21:31 Uhr

Er läuft über Sockets. So kann man z.b. ein Objekt in den Stream serialisieren und am anderen Ende wiede deserialisieren.

Gruss
tscherno

27.01.2008 - 17:08 Uhr

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

26.01.2008 - 15:31 Uhr

http://xkcd.com/344/

Edit:

Sorry aber den muss ich hier jetzt auch mal posten:

http://xkcd.com/371/

22.01.2008 - 22:02 Uhr

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

20.01.2008 - 23:27 Uhr

Ja es ist halt ein Hack. Am besten das Value imemr mit NULL befüllen und nur mit den Keys arbeiten.

Gruss
tscherno

20.01.2008 - 22:54 Uhr

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

16.01.2008 - 20:57 Uhr

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.

15.01.2008 - 16:58 Uhr

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

14.01.2008 - 18:27 Uhr

Hallo,

hat dein Benutzer Debug-Rechte?

Systemsteuerung/Verwaltung/Lokale Sicherheitsrichtlinie/Lokale Richtlinien/Zuweisung von Benutzerrechten/Debuggen von Programmen

Gruss
tscherno

14.01.2008 - 18:18 Uhr

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

07.01.2008 - 22:01 Uhr

JSON.NET

Gruss
tscherno

07.01.2008 - 18:48 Uhr

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

06.01.2008 - 18:18 Uhr

Ich tippe jetzt einfach mal das es irgendwo ein SDK gibt welches die benötigte DLL enthalten könnte. 😉

Gruss
tscherno

02.01.2008 - 14:48 Uhr

Das zu serialisierende Objekt (in deinem Code "g") muss einen parameterlosen Konstruktor besitzen. Ist das der Fall?

Gruss
tscherno

02.01.2008 - 00:04 Uhr

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

01.01.2008 - 20:53 Uhr

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

01.01.2008 - 20:11 Uhr

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. 😉

01.01.2008 - 19:52 Uhr

Bei ArrayList (und auch List<>) musst du mit den Methoden Add und Insert arbeiten.


Elements.Insert(0, new Bruchfeld(this, p));

Gruss
tscherno

01.01.2008 - 19:28 Uhr

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

30.12.2007 - 16:35 Uhr

Bei Mousedown einen Timer loslaufen lassen der nach 3000 Sekunden auslöst.

Gruss
tscherno

28.12.2007 - 19:51 Uhr

Also folgender Code gibt bei mir immer die richtigen Tasten auf der Konsole aus (auch Pfeiltasten):


for (; ; )
{
   Console.WriteLine(Console.ReadKey(true).Key);
}

28.12.2007 - 19:15 Uhr

Ich habe 2005 und 2008 angekreuzt, wobei ich 2008 nur verwende um mich mit den neuen Technologien vertraut zu machen.

Gruss
tscherno

28.12.2007 - 19:12 Uhr

Die zu übertragende Klasse muss dem Server und dem Client-Assembly bekannt sein.

Gruss
tscherno

28.12.2007 - 15:23 Uhr

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

27.12.2007 - 22:02 Uhr

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

27.12.2007 - 15:41 Uhr

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

26.12.2007 - 19:51 Uhr

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

26.12.2007 - 00:17 Uhr

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

21.12.2007 - 10:43 Uhr

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

16.12.2007 - 21:11 Uhr

System.IO.Ports.SerialPort ist eine Klasse um den seriellen Port (COM-Port) anzusprechen.

Gruss
tscherno