Zum Inhalt springen

Crush

Mitglieder
  • Gesamte Inhalte

    2048
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Crush

  1. Ich kann Dir nur sagen, daß Du da leider viel Pech haben wirst - OCI-Programme sehen leider immer so unleserlich aus! Ich habe mal vor 4 Jahren eine Wrapper-Klasse für OCI programmiert - damals gab es nahezu 0 brauchbare Dokumentationen dazu (auch und gerade die von Oracle sind für die Katz gewesen) und im Internet findet man auch nicht viel Brauchbares - und wenn, dann üblicherweise nur sehr simple Beispiele, die allerdings auch schon wieder so saumäßig kompliziert und chaotisch wirken (solange man nicht weiß, was sich hinter welchem Call tatsächlich verbirgt und wie die Parameter zu verstehen sind). Ich habe auch eine Woche gebraucht und eine halbwegs brauchbare Datenbankklasse mit OCI zu erstellen - die Geschwindigkeit, die man mit den Servercalls erreichen kann, ist es allerdings absolut Wert! Ich behaupte mal vorsichtig, daß es nur eine Handvoll Leute gibt, die überhaupt einigermaßen mit OCI umgehen können. Man fühlt sich übrigens wie Supermann, wenn man nach wochenlangem Experimentieren irgendwann mal einen sauber funktionstüchtigen Connect und Call alleine hinbekommt =8-) Aber wenn ich mich jetzt in Google umschaue siehts im Gegensatz zu damals doch richtig gut aus. schöne Dokumentation - sowas gabs früher leider nicht Massig brauchbare Links gleich auf der ersten Ergebnisseite Es gibt aber auch ein paar fertige Wrapper-Klassen für OCI, die sich relativ gut bedienen lassen, so wie ich beim Überfliegen grad gesehen habe.
  2. Ach, bevor Du lange rumrätselst, hab ich Dir die Lösung kurz geschrieben. Falls es mehrere Fenster mit gleichem Namen gibt, kannst Du auch schreiben: pwnd->PostMessage(WM_QUIT); oder auch WM_CLOSE wenn es nur um einzelne Fenster geht und das break; auslassen. (z.B. wenn man zig Internet Explorer Fenster über eigene Prozesse geöffnet hat und diese alle gleichzeitig auf Knopfdruck schließen will ohne den Maintask abzuschießen) Diese Methode ist allerdings nur für "normale" Fenster-Prozesse geeignet. Versteckte Prozesse, DLLs usw. abschießen ist ein wenig umständlicher. (Deshalb braucht man bei "Explorer.EXE" auch keine Angst haben!) Dein Problem ist damit allerdings sicherlich gelöst. CString name, Comparator("Explorer.EXE"); CWnd* pwnd = FindWindow(0,0); while (pwnd = pwnd->GetNextWindow()) { pwnd->GetWindowText(name); if (name.Find(Comparator) != -1) { pwnd->PostMessage(WM_SYSCOMMAND,SC_CLOSE); break; } } Für Experimentierfreudige empfehle ich damit etwas rumzuspielen (alle Fensternamen durchgucken). Man kann damit lustige Gag-Programme schreiben und so beispielsweise (sofort oder mit kurzer Sleep()-Verzögerung) die komplette Bedienleiste mit allen Tasks und Programmen (unten) einfach killen oder die Icons auf dem Desktop ins Nichts verschwinden lassen. Ist bestimmt sehr verwirrend und ärgerlich, wenn man das jemanden direkt in den Autostart reinhängt =8-)
  3. Halt Dich doch daran, was Goos gesagt. Das ist die einfachste Methode.
  4. Ich dachte ich hätte mal was von einer PC-Version gelesen. Sieht aber tatsächlich so aus, daß es das wohl nur für PS2 erstmal geben wird. Da müssen wir wohl noch 1-2 Jahre für einen brauchbaren PS2-Emulator warten oder doch irgendwann mal so ein Teil anschaffen (ich mag nur kein Spielen in niedrigen Auflösungen am Bildschirm, obwohl mich FF-X 1&2 fast schon überzeugen könnten mal so eine Konsole zu holen).
  5. Ist doch schnurz, wenn es 1.) gut aussieht und sich 2.) gut spielen läßt. Punkt 1 scheint ja ganz ok zu sein.
  6. "Zombies im Kaufhaus" -> Es gibt keinen Film der so heißt, so sagen nur ein paar zu "Zombie" um klar zu machen, welchen Zombie-Film sie meinen. Wenn wir so anfangen kann ich gleich mal "Zombie Nash" nennen, wo nicht ein Zombie vernascht wird =8-)
  7. Lustig ist ja, wozu die Fachinformatiker ausbilden: Fachinformatiker - ein Entsorgungsspezialist?
  8. Invalidate ist praktisch nur ein Neuzeichnen, aber UpdateData sollte die Variablen mit den Bildschirminhalten gleichsetzen. Vielleicht ist das Redrawing deaktiviert. Rufe vor dem DoModal SetRedraw(true) auf, vielleichts klappts dann.
  9. Bei Umschülern ist man mit 29 im Durchschnittsalter würde ich sagen. Bei Ausbildungen verhält sich das natürlich durch das Verhältnis Schulabgänger/Studi-Abbrecher anders.
  10. Probier mal UpdateData(false) & RedrawWindow() aus
  11. Vielleicht casten?
  12. Das geht eigentlich nur, indem man die WM-Close Nachrichten (welche die Fenster schließen) in der Nachrichtenschleife abfängt und rausfiltert, bevor sie den Browser-Task erreichen. Gibts sowas überhaupt schon?
  13. Crush

    Kurzgeschichte

    @LoneGunman Sie rächt sich so am Piraten für den Überfall und den Morden, meinte ich. Die Kurzgeschichten von Technician und EvilKneevil sind auch nicht übel, schon gelesen?
  14. Crush

    Kurzgeschichte

    Rache ist süß...
  15. Wenn sich niemand die Seiten wegen der Werbung mehr anschaut, die man nicht unterdrücken kann, erledigt sich die Notwendigkeit der Werbung von selbst. Außerdem glaube ich, daß man diese Zwangswerbungs-Software wie jede andere wieder deaktivieren oder umgehen kann.
  16. Crush

    Frohe Ostern!

    Nur zur Erinnerung: Ostern hat glaub herkömmlich nichts mit Eiern und Hasen zu tun, sondern mit der Bibel! Also geht mal alle brav in die Kirche, wenn man schon dafür frei bekommt! (sonst werden die Feiertage noch irgendwann mal abgeschafft) ... ansonsten wünsche ich auch allen auch schöne Ostern
  17. Na dann mal Prost!!! ihr Streber =8-)
  18. Mit dem "Polenschlüssel" könnte auch der Golfball mit dem Loch gemeint sein, was eigentlich eine humane Methode ist um Schlösser mit Überdruck zu öffnen. Ansonsten wird für sowas leider auch gerne einfach ein großer Schraubenzieher verwendet, wobei aber meist nur das Schloß selbst kaputt geht - was fies ist. Es ist schon traurig, daß es hier irgendwie immer noch keine sichereren Autoschlösser gibt, aber sonst Millarden in jede noch so überflüssige Technik investiert wird. Ich finde es erschreckend, hier zu lesen, wie oft Autoradios geklaut werden... Nehmt ihr diese Bedienpanels denn nie ab? Insbesondere bei Autoradios jenseits von 500 Euro?
  19. Crush

    DSL - Kein Sync

    Bei mir hat der Sync auch einmal nicht mehr funktioniert. Nach dem Aufknacken vom Modem hat sich herausgestellt, dass an den Steckverbindungen innen ein Wackelkontakt war. Diesen hab ich etwas sauber gemacht, neu zusammengesteckt und alles hat wieder funktioniert!
  20. Die Hitze bei über 200 Grad im Backofen hätte schon ausgereicht.
  21. Wie man sieht hab ich hier alles einfach in Rx1-Rx3 oder Rx4 gesplittet, was man natürlich auch als Array laufen lassen kann. Wie gesagt ist alles in Assembler wesentlich einfacher zu realisieren und ich werd das wohl irgendwann mal auch noch rein interessehalber auf 1024 Bit ummodeln, das bringt natürlich dann nur dann benchmarkmäßig etwas, wenn man auch tatsächlich mit Zahlen multipliziert, die sich in den oberen 1000 Bit-Bereichen aufhalten, weil ja nur von rechts an bis zum letzten Bit im Divisor hochgearbeitet wird.
  22. Ist das jetzt ausreichend? (96*128 Bit-Multiplikation->128 Bit Ergebnis) Darum gehts mir ja grad: Diese Methode ist performanter als ein arraybehaftetes Bignum-Verfahren. In optimiertem Assembler läuft alles übrigens nochmal mindestens um den Faktor 10 schneller! Ich werd glaub mal Speed-Tests machen, was schneller ist, diese Methode oder GMP mit 128 Bit. // Sollen die Register größer sein, muß man nur die Rx-Register um entsprechend viele zusätzliche Register erweitern // und das Rollen und die Addition um diese ergänzen unsigned int RA1,RA2,RA3,RB1,RB2,RB3,RB4,RC1,RC2,RC3,RC4,TMP1,TMP2,TMP3; RA1=RA2=RA3=RB1=RB2=RB3=RB4=RC1=RC2=RC3=RC4=TMP1=TMP2=TMP3=0; RA1 = 0x1234; RB4 = 0x1234; // RB1=0x20000001; while (RA1|RA2|RA3) { // Bei 1er Bits RB zu RC addieren if ( RA1 & 1) { TMP1 = RC1; TMP2 = RC2; TMP3 = RC3; RC1 += RB1; // C kann leider nicht mit Übertrag addieren, deshalb die TMP-Variable (wäre nur 1 Assembler-Befehl) if ( RC1 < TMP1 && RB1) RC2++; if ( RC2 < TMP2 && RB2) RC3++; if ( RC3 < TMP3 && RB3) RC4++; TMP2 = RC2; TMP3 = RC3; RC2 += RB2; if ( RC2 < TMP2 && RB2) RC3++; if ( RC3 < TMP3 && RB3) RC4++; TMP3 = RC3; RC3 += RB3; if ( RC3 < TMP3 && RB3) RC4++; RC4 += RB4; } RA1 = RA1>>1 | RA2 << 31; RA2 = RA2>>1 | RA3 << 31; RA3 >>= 1; // solange noch Bits da sind Multiplikator * 2 (=1x nach links rollen) if ( RA1 | RA2 | RA3 ) { // C kann leider nicht rollen (wäre auch nur 1 Assembler-Befehl) RB4 = RB4 << 1 | RB3 >> 31; RB3 = RB3 << 1 | RB2 >> 31; RB2 = RB2 << 1 | RB1 >> 31; RB1 <<= 1; } } CString Erg; Erg.Format("Ergebnis (hexadezimal): %p-%p-%p-%p dez hi3: %i (*4294967296hoch3) +dez hi2: %i \ (*4294967296hoch2) +dez hi1: %i (*4294967296) + dez lo: %i", RC4,RC3, RC2, RC1, RC4,RC3, RC2, RC1); MessageBox(Erg); [/PHP] ...außerdem glaube ich, daß der Code manchen zu Lehrzwecken auch nützlich sein kann So, jetzt ist aber Schluß für heute mit Binärarithmetik
  23. Wie Du willst: Hier erstmal die Multiplikation auf 64 Bit (eine Anpassung auf x-beliebig viele Bits ist ja beschrieben): // Sollen die Register größer sein, muß man nur die Rx-Register um entsprechend viele zusätzliche Register erweitern // und das Rollen und die Addition um diese ergänzen unsigned int RA,RB1,RB2,RC1,RC2,TMP; RA = 10; RB1=0x20000001; RB2= RC1= RC2= TMP = 0; while ( RA ) { // Bei 1er Bits RB zu RC addieren if ( RA & 1) { TMP = RC1; RC1 += RB1; RC2 += RB2; // C kann leider nicht mit Übertrag addieren, deshalb die TMP-Variable (wäre nur 1 Assembler-Befehl) if ( RC1 < TMP && RB1 != 0) RC2++; } RA >>= 1; // solange noch Bits da sind Multiplikator * 2 (=1x nach links rollen) if ( RA ) { // C kann leider nicht rollen (wäre auch nur 1 Assembler-Befehl) RB2 = RB2 << 1 | RB1 >> 31; RB1 <<= 1; } } CString Erg; Erg.Format("Ergebnis (hexadezimal): %p%p dez hi: %i (*4294967296) + dez lo: %i", RC2, RC1, RC2, RC1); MessageBox(Erg); [/PHP] Von der Division hab ich leider nur noch die Assembler-Version einigermaßen funktionstüchtig (ist glaub noch irgendwo der Wurm drin), aber sollte ich die wesentlich kürzere C-Version evtl. noch korrigiert bekommen, kann ichs - falls gewünscht - noch nachreichen: [PHP] typedef struct {unsigned long hi; unsigned long lo;} i64; // 64-Bit Division (64-Bit-Zahl/64-Bit Divisor/64-Bit Rest...) Rest steht im Hilfsregister i64 divident,ergebnis,divisor,hilfsregister; divident.lo=0x23462;divident.hi=0x0; // divisor.lo=0x80000000;divisor.hi=0; divisor.lo=0x3;divisor.hi=0x0; ergebnis.lo=1;ergebnis.hi=0; hilfsregister.lo=0;hilfsregister.hi=0; _asm { push eax // divisor push ebx // divident push ecx // hilfsregister push edx // ergebnis mov eax,divisor.lo mov ebx,divisor.hi xor ecx,ecx bsr cx,divident.hi jne clp1 mov ecx,divident.lo mov divident.hi,ecx xor cx,cx mov ergebnis.hi,1 jmp noclp clp1: rol divident.lo,1 rcl divident.hi,1 rol ergebnis.lo,1 rcl ergebnis.hi,1 loop clp1 noclp: xor ecx,ecx bsr ecx,divident.hi jne noclp2 clp2: rol divident.lo,1 rcl divident.hi,1 rol ergebnis.lo,1 rcl ergebnis.hi,1 loop clp2 noclp2: xor ecx,ecx mov ecx,hilfsregister.lo mov edx,hilfsregister.hi lp: rol divident.lo,1 rcl divident.hi,1 rcl ecx,1 rcl edx,1 cmp edx,ebx jc h1 cmp ecx,eax jc h1 sub edx,ebx sbb ecx,eax clc h1: cmc rcl ergebnis.lo,1 rcl ergebnis.hi,1 jnc lp mov hilfsregister.lo,ecx mov hilfsregister.hi,edx pop edx pop ecx pop ebx pop eax } TRACE("Ergebnis: %p Rest: %p",ergebnis.lo,hilfsregister.lo); Wer allerdings meinen Code verwendet soll mich irgendwo im Sourcecode erwähnen =8-)
  24. Eine Multiplikation auf x-beliebig viele Bits selber zu programmieren ist eigentlich sehr einfach. Binär ist das relativ simpel zu handhaben und Kommastellen stellen auch kein Problem dar (da werden die Bits im Fall von 0,irgendwas nur in die andere Richtung geshiftet, was etwas Mehraufwand darstellt, aber in diesem Fall ja eh nicht gebraucht wird), wenn man z.B. die ersten 64 Bit für die Kommastellen verwendet und die nächsten 256 Bits für den Ganzahlteil. Die Division ist da schon etwas komplizierter, aber wenn man weiß wie, geht das auch sehr einfach mit ein paar Zeilen Code.
  25. @Darkman2001: Ist zwar ein gutgemeinter Tip von Der Kleine, den Source in einem Thread zu posten. Ich wäre aber vorsichtig, weil das mit Garantie ein Kündigungsgrund ist. Und wenn, dann am Besten unter anderem Namen und lediglich Code-Fragmente, wenn überhaupt. Vielleicht schaut jemand aus Deiner Fa. hier mal zufällig rein oder überwacht Deine Surfgewohnheiten - und wenn er Dich dann in die Pfanne hauen will...

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...