Laden...

Forenbeiträge von rasepretrep Ingesamt 103 Beiträge

21.10.2010 - 15:48 Uhr

Oops sorry, Thread nicht zu Ende gelesen und gleich gepostet ..
Genau das meinte ich.
MD5 gilt zwar nicht (mehr) als Kollisionssicher, aber ich glaube für diesen Zweck kann man das bequem ignorieren.

21.10.2010 - 14:03 Uhr

Also Ich fand Deinen Vorschlag mit einer Guid und dem Int32 als Zähler und anschliessendenm Md5 ganz gut, nur würde ich den Zählerwert nicht auf die Guid aufaddieren, sondern den md5 string aus beiden Werten (also 20 bytes) nehmen.

Auf meinem guten alten Windows NT 4 war das immer so, dass sich die Guid aus der Mac Addresse + irgendwas anderes statisches + Zähler zusammensetzte, mittlerweile scheint Microsoft sich da was besseres überlegt zu haben (MD5? 😉).

21.10.2010 - 13:49 Uhr

Umm Dein Beispiel ist gar kein Xml Dokument.

meinst Du in der 2. Zeil vielleicht sowas wie

<Id name="ident{0}"/>

20.10.2010 - 16:26 Uhr

Änderung um den Wert X bei einer Trackbar

verursacht Y = X / (AnzTrackbars-1)

Änderung bei allen anderen Trackbars (natürlich mit unweigerlichen Rundungsfehlern)

Meinst Du sowas ?

20.10.2010 - 09:27 Uhr

Wenn Du schon bestehende Routinen auf basis von Graphics hast, kann ich Dir auch PdfSharp empfehlen.

Diese PDF Bibliothek ist unabhängig vom Acrobat und zeichnet in PDFs mit einer Graphics ähnlichen API, nennt sich dann nur XGraphics, XPoint, Xfont ....

14.10.2010 - 10:08 Uhr

Der Vollständigkeit halber hier mal meine Variante des Serializers:


public static void Serialize(Object obj,String strFileName) {

            if (!Directory.Exists(Path.GetDirectoryName(strFileName)))
                Directory.CreateDirectory(Path.GetDirectoryName(strFileName));

            XmlSerializer xs = new XmlSerializer(obj.GetType());

            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.Encoding = Encoding.UTF8;
            using (XmlWriter xmlWriter = XmlWriter.Create(strFileName, settings))
            {
                xs.Serialize(xmlWriter, obj);
            }
  }


public static T DeSerialize<T>(String strFileName)
{
            T retVal;

            using (FileStream fs = new FileStream(strFileName, FileMode.Open))
            {
                XmlReader reader = new XmlTextReader(fs);
                XmlSerializer xs = new XmlSerializer(typeof(T));
                retVal = (T)xs.Deserialize(reader);
            }
            return retVal;
 }

14.10.2010 - 10:00 Uhr

Hallo Inflames2k,

Klar geht natürlich auch deine Variante und kommt aufs gleiche raus, aber das Serialisieren als List<T> wird auch schon ab der Frameworkversion 2 unterstützt.

Die Rückwärtskompatibilität zu 1.0 oder 1.1 habe ich schon längst abgeschrieben, da gibts ja nicht mal Generics.

12.10.2010 - 09:02 Uhr

Schon krass was für einen sowohl semantisch als auch logisch fehlerhaften Schrott man manchmal in der MSDN findet..

11.10.2010 - 13:20 Uhr

Hmm verstehe ich nicht den Workaround mit dem Array.
man kann doch Listen serialisieren. einfach

typeof(List<MyType>) beim serialisieren

und als Rückgabe beim deserialisieren List<MyType> nehmen.

20.09.2010 - 11:27 Uhr

Hallo,

die von dir genannten Bibliotheken (gibt übrigends auch noch PdfSharp, nicht zu verwechseln mit SharpPdf 😉 können ohne Druckertreiber ein Pdf erstellen oder bestehende pdfs importieren und modifizieren.
Was die alle NICHT können ist direkt Html in ein Pdf zu konvertieren. Falls Du das erreichen willst, bist Du mit einer Reporting Software besser bedient, falls es überhaupt eine gibt, die vernünftig Html in Pdf umwandeln kann.

Problematisch sind da auf jeden Fall immer die Seitenwechsel, da html ja kein Druckformat ist. Die sauberste Lösung wäre auf jeden Fall Druck Ansichten unabhängig vom Html Code zu generieren.

14.09.2010 - 11:21 Uhr

Hallo,

Ich weiss nicht, wie das mit outlook.applikation geht, aber mit der mapi api gehts das von dir beschriebene Verhalten auf jeden Fall.
Falls Dir hier sonst niemand einen Tip geben kann schau doch nach nem Mapi Wrapper (z.B. MapiEx auf codeproject.com), damit kann man das von dir gewünschte Verhalten auf jeden Fall umsetzen.

09.09.2010 - 15:16 Uhr

Lotus Notes kann auch mapi. Mit einem mapi wrapper für c# (z.B. dem hier
http://www.codeproject.com/KB/IP/CMapiEx.aspx kannst Du auf jeden Fall mails üver notes versenden und subject, body etc. vordefinieren.

16.08.2010 - 13:47 Uhr

Sorry ich will jetzt nicht Erbsenlesen aber BOMs sind nicht immer nur optional. Bei utf-16 und utf-32 sind sie Pflicht.
Steht auch genau so in deinem geposteten Wikipedia Artikel.

13.08.2010 - 16:36 Uhr

UTF- 8 braucht eigentlich kein Byte Order Mark (ist ja egal ob das nun big oder little endian ist).
In der Spezifikation steht ausdrücklich, dass ein BOM für UTF-8 ERLAUBT ist, aber eben nicht zwingend. Also mit der BOM detection kommt man allenfalls in einem homogenen kontrollierten Umfeld klar.

Edit.: Hatte mich mal beruflich mit der Kanji Codierung unter Windows beschäftigt (ganz krank, das;) und da gabs doch glatt ein Tool von Microsoft, das VERSUCHT hat zu erkennen welches Encoding in das Dokument hat (anhand von stochastischen Vorkommen von bestimmten Zeichen). Das das nie zu 100% funktioniert ist wohl klar...

09.08.2010 - 16:49 Uhr

Du könntest auch mal das hier ausprobieren:

http://www.codeproject.com/kb/office/ExcelReader.aspx

Sieht auf jeden Fall vielversprechend aus.

09.08.2010 - 15:53 Uhr

@dr4g0n76

Mann, das ist ja mal ne coole Hilfsklasse, Danke für den Link .. 😉

09.08.2010 - 14:20 Uhr

Interessant, aber auch nicht die ultimative Wahrheit, die FAQ.

Methode#3 kommt einem rofeach schon näher, aber wie die Faq schon sagt kommt man ab und zu um die als "naiv" skizzierte Methode (warum eigentlich naiv?) nicht herum.

Die Idee mit den Backuplisten würde ich schon eher als "naiv" bezeichnen, aber das ist meine persönliche Meinung.

Da wäre ein rofeach schon angebracht oder wenn viele Einfüge- und Löschvorgänge anstehen wäre ohnehin eine LinkedList<T> besser, die löschen als o(1) Aufwand betreiben kann.

09.08.2010 - 13:42 Uhr

Diese ganze For(;;) Schleife könnte man sich sparen wenn es ein rofeach gäbe (foreach anders herum 😉)

09.08.2010 - 13:32 Uhr

muss nich i = list.count-1 sein ? 😉

09.08.2010 - 11:45 Uhr

Das was Du da versuchst ist eigentlich eine Domäne von Object-relationalen.Mappern (ORMs).

Z.b. NHibernate Stichwort: Lazy laoding.

Du kannst natürlich auch ORM ORM sein lassen und mit einem AOP etwas ausrichten. So etwas haben wir hier mit Postsharp realisiert, das über den "MethodBoundaryAspect" vor und nach beliebigen Funktionen Code einfügen kann.

05.08.2010 - 11:31 Uhr

Wegen dem SortierProblem kannst du mal nach der SortableBindingList<T>
googeln.

Damit kann das DGV auch sortieren. Ich hole mir für meine DGVs immer eine

IList<T> aus nhibernate und übergebe diese an eine SortableBindingList<T>, die dann an die DGV datasource gebunden wird.

05.08.2010 - 11:13 Uhr
Application.CurrentCulture = new System.Globalization.CultureInfo("en-GB", true);
30.07.2010 - 11:35 Uhr

Wie schon von Herbivore gesagt, kommt Du über reflection auch an die geschützten Properties heran.

Allerdings ist Dein Beispiel richtig übler Programmierstil. Objecte, die von einer fremden Bibliothek herausgereicht werden sollte man IMMER auch von der Bibliothek behandelt lassen.
Das ist in C oder C++ auch nicht anders oder sogar noch "schlimmer" als in C# (z.B. unterschiedliche malloc() und free() Implementierungen in verschiedenen Dlls).

30.07.2010 - 09:09 Uhr

Hallo,

Mein Installer prüft die Frameworkversion über die Registryeinträge. Vielleicht macht Deiner ja das gleiche. Schau doch mal, ob die Einträge unter

HKLM\Software\Microsoft\NET Framework Setup\NDP&lt;version>

stimmen

28.07.2010 - 14:33 Uhr

Winmerge integriert sich übrigends auch wunderbar in SVN und kann das eingebaute diff von Tortoise ersetzen..

28.07.2010 - 14:12 Uhr

Sieht gar nich so über aus...

Schon mal geschaut, ob du in deiner Foreach Schleife auch das gleiche Parent hast wie beim controls.add?

Vielleich einfach mal Breackpoints setzen. Genaues kann man deinem Schnipsel nicht entnehmen, aber ich vermute mal das

groupBoxBoxes!= groupBox2

Btw:

Dieses Konstrukt mit try .. catch und leerer Fehlerbehandlung ist auch nicht gerade sehr schön.

Mach doch lieber sowas wie


tx = ctrl as TextBoxWithRules
if (tx!=null) {
//undsoweiter 
}
21.07.2010 - 17:06 Uhr

probier doch mal folgendes :

TimeSpan ts = datePwdExpire.Subtract(DateTime.Now.Date);
31.05.2010 - 15:45 Uhr

Also ich nehme bei mir

const int WM_ERASEBKGND = 0x14;

als message. Hier mal ein copy & paste aus meiner wndproc beim Datetimepicker


 if (m.Msg == WM_ERASEBKGND)
            {
               Graphics g = Graphics.FromHdc(m.WParam);                 
//...           
                g.Dispose();
                return;
            }

den §$%& Datetimepicker anzupassen hat mich persönlich schon viel Ärger und Zeit gekostet, weil er wie schon oben gesagt als win32 control eingebunden wird. Mit WM_PAINT kommt man da auf keinen Fall weiter, ich befücrchte fast WM_NCPAINT geht auch nicht. Das einzige was bei mir zuverlässig funktionierte war obiges Beispiel.

21.05.2010 - 09:27 Uhr

FYI:
Habe gerade bei meiner Hibernate Config geschaut, sieht genauso aus wie bei Dir und ich brauche keine castle.dynamicproxy in der alten version, nur die neue.
Ich habe hier noch NH 2.1, sollte aber an der Stelle keinen Unteschid machen.

Vieleicht mal die ' durch " austauschen bei dem proxyfactory attribut?
Nhibernate ist anfangs ein bischen schwierig einszustellen, aber wenns erstmal läuft ne nette Sache.. 🙂

01.04.2010 - 10:49 Uhr

Hallo,

Stichwort: Marshal Namespace

Du musst audf jeden Fall unmanaged Speicher reservieren und den an die C Funktion übergeben.

Pseudo code


IntPtr iPtr = Marshal.AllocHGlobal(size in bytes);

//c funktion mit iPtr  aufrufen

Marshal.PtrTo... //Inhalt  in separates managed object zurückschreiben

Marshal.FreeHGlobal(iPtr); //unmanged speicher freigeben

17.03.2010 - 11:27 Uhr

Das hier sieht ganz vielversprechend aus:

http://www.oblita.com/hooking-part1

Wenn Du dich wirklich mit Treiberprogrammierung beschäftigen willst, dann must Du ein bischen nach DDK und "Keyboad Filter driver" googeln. Dafür sind aber zwingend weitreichende Kentnisse in C++ und Windows Treiberprogrammierung notwendig und selbst dann ist das ganze umständlich, weil es kaum Debugmöglichkeiten gibt und Fehler im treiber das ganze System lahmlegen. Zusätlich meckert Windows noch rum, wenn man unsignierte treiber installieren will und dann hat man noch Ärger wegen geänderteten Treiberschnittstellen unter W2K,XP , Vista und Win7.
Also kurz gesagt : VERGISS ES. 😉

Vielleicht bringt dich ja auch der link oben weiter.

16.03.2010 - 09:05 Uhr

Kann Herbivore nur zustimmen, habe vergessen zun erwähnen, dass das absolut nicht zu empfehlen ist, wenn man nicht gerade fortgeschrittener C(++) Programmierer mit viel Hintergrundwissen und Treiberprogramierungs Know-How ist.

08.03.2010 - 09:50 Uhr

Also, was auf jeden Fall geht, wäre einen eigenen Tastaturtreiber zu schreiben und den einzubinden.
das geht aber dann definitiv nicht mehr in C#, sondern nur in C(++) mit dem DDK.

04.03.2010 - 09:36 Uhr

Tsss, entweder habe ich das Problem hier nicht verstanden, oder Ihr denkt hier alle zu umständlich. 🤔

wenn du Databinding nimmst kannst Du im DataGridView bei der Selected row über die DataboundItem Eigenschaft gehen.


  foreach (DataGridViewRow dgv in myDatagrid.SelectedRows)
            {
               
                MyClass m=(MyClass)dgv.DataBoundItem;
       ----

24.02.2010 - 13:34 Uhr

Kar hab ich ne Idee! Besorg Dir ne billige usb Tastatur für 5 Euro und kleb die Taste mit sekundenkleber fest. Dann anschliessen und bingo 😉

09.02.2010 - 16:28 Uhr

Hmm, könnte schwierig werden, da crc stark von dem verwendeten Polynom abhängt.

probier mal 0x04C11DB7 für poly, das ist der Wert für Ethernet packete und Zip CRC-32

27.01.2010 - 11:38 Uhr

Hallo,

Wir verwenden hier auch NHibernate als ORM mit 3-Tier Architektur in der Firma, deshalb wollte ich mal kurz dazu schreiben, wie wir das gemacht haben:

Zuerst haben wir auf Lazy loading verzichtet, war auch alles noch performant genug.
Bei grösseren Datenmengen kann man netterweise auch für one-to-many verknüpfungen angeben, dass joins zum fetchen der Daten genutzt werden sollen, was spürbar mehr performance gebracht hat.

Mit steigenden Datenmengen und mehrfach untereinander verknüpften Tabellen wurde es dann allerdings immer langsamer und vom Klassendesign auch unschön, da man verknüpfungen zu anderen Klassen (und damit Tabellen in der DB) nicht mehr in NHibernate , sonden manuell verknüpft hat, was bei steigender Komplexität nervig wurde. Letzten Endes hat man dann kein richtiges ORM mehr, sondern teils ORM, teils HQL gefrickel, was unschön und schwer zu warten ist.

Wir haben uns dann einen eigenen Lazy loading handler "gebastelt".
Das ging mit aspektorientierter Programmierung (wir haben PostSharp verwendet, das sich in jede Lazy Property "reinhängen" kann) und viel Reflection und jetzt läufts perfekt. War aber eine MENGE Arbeit und schwierig umzusetzen.

Die NH Entwickler raten grundsätzlich davon ab, Hibernate in so einem Szenario mit lazy loading zu verwenden. Ich persönlich sehe das nicht so, wir haben aber wie gesagt sehr viel Arbeit hineinstecken müssen, um NH unseren Wünschen anzupassen.
Vielleicht bist Du mit einem anderen ORM als NH bei Deiner Architektur besser bedient. Es gibt halt nie DAS ORM, jedes hat seine Stärken und Schwächen.

05.01.2010 - 09:29 Uhr

Das ist ein schwieriges Unterfangen, weil Du mehrere verschiedene Dokumenttypen drucken willst. Allein alle Dokumente als EINEN Druckjob herauszuschicken ist schon nicht trivial.

Ich skizziere mal einen möglichen (komplizierten) Lösungsweg:

Druckaufträge zu einem zusammenzufassen geht mit einem virtuellen Drucker (z.B. FreePDF) , der Druckaufträge von verschiedenen Applikationen sammelt und dann ein PDF daraus macht. Hier gibt es ausser Freepdf auch viele kommerzielle Lösungen mit APIs.

Entweder kann man diesen virtuellen Drucker schon so steuern, dass er zu jeder Seite die Kopf- und Fußzeile hinzufügt, oder Du bearbeitest das resultierende PDF nach und fügst die Informationen als extra Schritt hinzu.

Für so etwas kann ich Dir pdfsharp empfehlen, damit kann man PDF nachbearbeiten und Kopf/ Fußzeile etc hinzufügen.

17.12.2009 - 15:46 Uhr

Hmm ich glaube, dass das mit der CDATA Sektion auch keine gute Idee ist.
steht in den Binärdaten z.B. irgendwo "]]>" (der Terminator für die CDATA section)
ist das XML Dokument schon mal invalide.

Ausserdem ist das mit der CDATA Section schon irgendwie merkwürdig und lässt sich eigentlich auch nur mit einer validen DTD vernünftig von XML Parsern verarbeiten.

17.12.2009 - 11:02 Uhr

Hallo,

Ich habe mir so geholfen, dass ich die ganze XML datei verschlüssele, also mir der Reihenfolge beim Speichern:

XML dokument -> Verschlüsselung -> Datei

Wichtig ist dabei dass nach der Verschlüsselung KEIN string objekt mehr vorliegt sondern ein Byte[] array.

Das lies sich von der Implementierung her ganz gut mit filestreams machen.

Um nur einzelnde Nodes zu verschlüsseln müsste man folgendermassen vorgehen:

string text der node -> verschlüsselung zu Byte[] !! -> konvertierung in gültigen string über base64 / mime encoding o. ä.

Man muss halt höllisch aufpassen, dass man keine "zufälligen" Binärdaten in strings ablegt, und genau so etwas passiert nun mal bei einem guten Verschlüsselungsalgorithmus.

@rastalt: klingt ja ganz gut deine Idee, aber die Konvertierung in base64 o. ä. muss NACH der Verschlüsselung erfolgen, sonst kommen wieder binärdaten heraus

10.12.2009 - 09:09 Uhr

such mal mit google nach der SortableBindingList<T>.
Mit der klappt das bei mir bisher ohne Probleme

05.10.2009 - 16:50 Uhr

Nur so als Denkanstoss:

Wenn Du nur meherere Objecte Gleichen Typs serialisieren möchtest, ist es natürlich sinnvoll sich eine List<Objekttyp> als Hilfsobjects zu bauen und die dann zu (de)serialisieren.

Bei mehreren Objecten verschiedenen Typs und grösseren Datenmengen habe ich mittlerweile bei meinen Projekten einen ahnlichen Ansatz wie bei dem .odf Dateiformat implementiert:

Die Objekte werden als separate XML Dateien in ein temporäres Verzeichnis serialisiert und hinterher in ein .zip archiv verfrachtet (die sharpziplib habe ich für die (de)kompression verwendet).

Die Idee mit der Überklasse ist zwar eine schnellere Lösung, dafür verlierst Du aber einiges hinsichtlich Flexibilität bei Versionsänderungen und das Debuggen von (De)Serialisierungsfehlern ist auch schwieriger.

11.08.2009 - 13:21 Uhr

@madjoe

Umm, ging mir bei meinem vorigen Kommentar weniger um die direkte Implementierung in der Hibernate Doku mittels Interfaces, sondern um das <any> Attribut, mit dem sich eine Verlinkung zu beiden abgeleiteten Klassen mittels einer <any> Property machen lässt.

11.08.2009 - 12:00 Uhr

Hallo,

schau mal in der Hibernate Referenz doku unter

8.1.6. Table per concrete class, using implicit polymorphism

nach. Da gibt es ein Beispiel wie man so etwas macht. In dem Beispiel wir mit dem <any> mapping gearbeitet. Bin auch gerade dabei so etwas zu modellieren..

19.06.2009 - 17:09 Uhr

Möglichkeiten gibts da viele (Stichwort VersionKonstrollSystem), habe bisher beruflich mit SourceSafe, CVS und SVN gearbeitet.

Meine persönliche Meinung zu diesem Thema

  • Sourcesafe ist Schrott und total veraltet, hat allerdings eine Integration ins Visual Studio, die aber auch mega nervt, wenn man mal offline arbeiten will

  • CVS ist schon besser, aber eigentlich SVN unterlegen.

  • SVN ist das, womit ich zur Zeit arbeite und es ist ganz brauchbar, auch kompliziertere
    Sachen lassen sich machen. Tortoise SVN ist eine Implementierung, die sich in den Explorer integriert und den Einstieg erleichtert, als Server kann man unter Windows ganz gut den VisualSVN nehmen.

11.06.2009 - 10:11 Uhr

Hallo,

habe das hier nur flüchtig überflogen, aber eins ist mir trotzdem gleich aufgefallen:
unsigned char in C ist nicht das gleiche wie der char Typ in C# (Unicode)

Ausserdem muss der Puffer unmanaged reserviert werden.
also etwa so:

IntPtr iPtr = Marshal.AllocHGlobal(1000);

.. und hinterher wieder freigeben werden

Marshal.FreeHGlobal(iPtr); 

in einen C# string kannst Du das z.B. mit

Marshal.PtrToStringAnsi()

wieder umwandeln.

Schau dir mal den Marshal Namespace genauer an, gibt auch sonst ne Menge Beispiele im Netz.

29.05.2009 - 16:14 Uhr

Hallo,

mit den von Dir oben beschriebenen Properties hatte ich bei meinem Project nicht wirklich Erfolg. Beispielsweise stimmten die Anchorpoints von meinen Controls mit unterschiedlichen DPI Einstellungen nicht immer, der Visual Studio Designer scheint die Koordinaten der Controls bei unterschiedlichen DPI Einstellungen auf meinem Entwicklungsrechner auch entsprechend anders zu interpretieren, etc.

Die "automatische" Umrechnung von Control Koordinaten auf andere DPI Einstellungen innerhalb von Forms scheint teilweise fehlerhaft zu sein, ganz zu schweigen von manuell gezeichneten Controls, die auch Probleme verursachen werden.

Die aufwendige und bisher für mich einzig zuverlässige Lösung für mich war auf Anchorpoints und absolute koordinaten möglichst zu verzichten,
jedes Form mit einem Tablelayoutpanel und Dockstyle.fill zu versehen und darin die controls zu plazieren, möglichst mit Dockstyle.fill oder top innerhalb der Zelle.
Die Spalten und Zeilen des Tablelayout panels haben wenn möglicheine Autosize oder Prozentuale größe, damit ja keine absoluten Koordinaten da sind.

18.05.2009 - 16:50 Uhr

Hast du die .suo Datei schon mal gelöscht und dann debugged?
Da stehen rechnerspezifische Debuginformationen drin. Die Datei sorgt bei mir auch sonst immer mal wieder für lustige unerklärbare Phänomene so dass das immer mein erster Schritt ist, die zu löschen.

15.05.2009 - 08:56 Uhr

Hallo,

Das mit der 50% Auslastung ist schon lustig. Kann das sein, dass die Rechner mit dem Fehlverhalten DUAL CORE rechner sind und Du in Wirklichkeit 100% Auslastung auf einem Kern hast?

Tritt dann das Problem vielleicht nur auf mehrkernigen Rechnern auf?

17.04.2009 - 14:32 Uhr

Hallo, hatte das gleiche Problem und hab mir damals mit einer noch unschöneren Variante geholfen


//Funny workaround to force active edit contol to commit its changes
 SendKeys.SendWait("{TAB}");
SendKeys.SendWait("+{TAB}");   

sendet einmal Tab und dann Shift-Tab um aus dem Control heraus und wieder hineinzuspringen. Dabei wird die Bindingsource aktualisiert
Die Cursorposition bleibt netterweise dabei erhalten.