Laden...

Forenbeiträge von Coder007 Ingesamt 1.214 Beiträge

17.10.2011 - 12:01 Uhr

Hi Khalid,

weißt du auch, warum das so ist? Die Beobachtung habe ich noch unter Windows 98 gemacht. Die Shellfunktionen waren um Längen schneller, als FindFirstFile und FindNextFile. Liegt es einfach daran, dass die Shell einfach mehr Werte cashed?

16.10.2011 - 20:16 Uhr

HIILLFFFEEEEEEEEEEEEeeeeeeeeeeeeeeeee 😃)))

Sowas wird in keinem Forum gern gesehen.

Was du brauchst, ist die Tag Eigenschaft. Da könntest du z.B. die ID speichern. Am besten erstellst du aber Klassen für die Business Logik, und speicherst die.

16.10.2011 - 19:49 Uhr

Warum ist das umständlich? Ich weiß nicht, was du dir jetzt davon erwartest. Es ist, wie es ist. Du willst es vielleicht so haben, der nächste wills anders haben.
Es gibt doch einen Haufen Kommunikationsbibiliotheken, die höher angesiedelt sind, such dir was aus. Allein schon .NET Remoting oder WCF. Passt eh viel besser zu deinem Anwendungsfall, würde ich sagen.

16.10.2011 - 19:01 Uhr

Ich weiß nicht, ob das jetzt so schnell und unkompliziert ist... Ich würde für sowas kein extra Programm benutzen wollen. Schließlich können das sehr viele Bildbetrachter/Bilddatenbanken, die man eh schon nutzt, sowieso schon. Wenn schon, dann könntest du das vielleicht als Property Sheet Handler für den Explorer realisieren, dann würds vielleicht schnell gehen.

15.10.2011 - 19:24 Uhr

Das muss in Echtzeit oder schneller gehen. Zeig ein bisschen was von deinem Code. Vielleicht hat er ja grundlegende Mängel, die schnell behoben sind.
Wenn du deinen Code nicht selber auf mehrere Threads verteilst, wirds auch kein anderer für dich machen 😉
WPF ist sicher auch keine schlechte Idee, könntest es dir auf jeden Fall mal genauer anschauen.

15.10.2011 - 16:51 Uhr

Ob GDI oder GDI+ ist fast egal (GDI ist etwas schneller, hauptsächlich, weils weniger kann). Da du C# verwendest, wirds GDI+ sein. Aber wie genau machst du das? Vielleicht kann man an der Stelle in paar Zeilen Code schon einiges rausholen.

15.10.2011 - 16:05 Uhr

Debuggs halt einfach durch, warum willst du jetzt die Arbeit auf andere schieben? Da gibts halt auch eine Stelle, wo tatsächlich eine Datei geöscht wird, das wär doch ein Anhaltspunkt zum Debuggen.

15.10.2011 - 16:03 Uhr

Also, ganz so einfach wird es nicht gehen. Generell könnte man da schon einiges optimieren. Bin jetzt selber nicht auf dem neuesten Stand und weiß nicht, was es grad für Frameworks gibt, aber die werden auf jeden Fall andes aufgebaut sein, als GDI, ohne dein Programm fast komplett umzubauen wird es wahrscheinlich nicht gehen. Und ohne sich in der Thema reinzudenken wohl sowieso nicht.
Wie funktioniert dein Programm denn bisher? Vielleicht kann man da schon was optimieren?
Ganz grobe Schätzung, auf Basis einiger Experimente, die ich vor etlichen Jahren GDI gemacht habe. Damals hatte ich einen 400 MHZ Pentium II und damit habe ich auch recht flüssige Animationen mit GDI hinbekommen (aber nicht Fullscreen). Vielleicht ist deine Verarbeitung komplexer, also paar FPS abziehen. Allerdings ist der Rechner um einiges leistungsfähiger, wahrscheinlich mindestens Faktor 10. Von dem her müsste es auch ohne Graka reichen.

Nur so nebenbei, gibt es nicht schon haufenweise kostenlose/Open Source Programme, die den von dir beschriebenen Effekt auch umsetzen könnten?

13.10.2011 - 20:50 Uhr

Wozu? Kann mir nicht vorstellen, dass das wichtig ist. Mach halt notfalls den Explorer auf und selektier die Datei vor, dann soll der Benutzer sie selber aufmachen und sein Passwort eintippen.

12.10.2011 - 17:04 Uhr

Stimmt das vom Prinzip so?

Nein. Ich hab doch gleich vorgeschlagen, du sollst dich in das Thema einlesen und nicht raten 😉
Die IP reicht nicht. Du schickst ein Paket raus. Das hat eine Target IP, Target Port, Source IP, Source Port. Source IP ist die lokale IP Adresse von deiner Netzwerkkarte, der Source Port wird dynamisch vom Betriebssystem vergeben. Jetzt kommt das Paket bei deinem Router an und er ändert das Paket. Neue Source IP, neuer Source Port. Jetzt muss dein Freund seine Pakete an den Source Port schicken, den dein Router vergeben hat. Den kann er nicht wissen, und du genauso wenig. Dafür brauchst du den Zwischenserver, den beide kennen. Wenn dein Freund die Paketen nicht an den Port schickt, den der Router dieser Verbindung zugewiesen hat, dann wird der Router den auch nicht durchlassen.

11.10.2011 - 20:47 Uhr

indem ein gemeinsamer Server, mit dem beide Clients verbunden sind, die Verbindung vermittelt.

Richtig. Den gemeinsamen Server braucht man zwar nicht unbedingt, aber irgendwie müssen die Clients die Source Ports der Gegenstelle kennen, die dynamisch vergeben werden. Von dem her hat dein Code nichts mit UDP Hole Punching zu tun.

11.10.2011 - 20:36 Uhr

Die haben bloß Prozesse starten blockiert, damit man keine Daten anderer Kunden auslesen kann.

Wenn du beliebigen Code ausführen kannt, wo ist da jetzt der Unterschied, ob der Code in einem eigenen Prozess läuft oder nicht? Sicherer macht es das auf keinen Fall.

11.10.2011 - 00:02 Uhr

Ja, mit DirectShow sollte es gehen, wenn du die entsprechenden Filter installieren darfst. Ist nicht schwer, solltest tausend Beispiele im Netz und hier finden.

10.10.2011 - 23:08 Uhr

Sollte UPNP denn eigentlich funktionieren? Oder ist das bei eh fast jedem Router ausgestellt?

Das ist unterschiedlich. Ich hatte es tatsächlich eine Weile lang aktiviert gehabt, weil ich keine anderen Möglichkeit hatte, den Router zu steuern (es ging nicht um die Freigabe von Ports). Aber es ist natürlich eine ziemlich krasse Sicherheitslücke. Erst neulich wurde entdeckt, dass sich viele Router über UPNP von außen übers Internet ohne Anmeldung (kann UPNP ja eh nicht) umkonfigurieren lassen. Von dem her sollte man das eher abschalten.

10.10.2011 - 21:54 Uhr

Sorry, aber ich hab nicht das Gefühl, dass du genau verstehst, wovon du redest. Generell ist es dir schon klar, aber nicht in der erforderlichen Tiefe und du hast wohl auch keine Ahnung, wie das testen kannst.

Z.B. dass das per udp ganz gut geht, wenn beide gleichzeitig an die andere Ip senden. Denn dann denkt der Router das sei eine Antwort auf das eben losgeschickte Packet.

Das ist viel zu schwammig formuliert. Die Technik nennt sich UDP hole punching. Such bitte danach und lies dich ein. Wenn du das verstanden hättest, hättest du das nicht so salopp formuliert.

Am Anfang vom Quellcode ist auchnoch ein UPNP Port öffner. Aber ich glaube der funktioniert ech nicht.

Du glaubst? Warum überprüfst du das nicht? Das kannst du doch überprüfen. Ist auf dem Router überhaupt UPNP aktiviert? Werden richtige Pakete geschickt, ist der Port danach offen?

In deinem Code sehe ich jetzt nichts, was direkt mit UDP hole punching zu tun hätte. Habs aber nur überflogen von dem her würde ich für die Aussage nicht die Hand ins Feuer legen. Ich würde aber vermuten, dass es bei dir geht, weil dein Netzwerk entsprechend eingerichtet ist, oder du zuerst sendest, oder sowas. Das ist aber auch nicht schwer rauszufinden. Du kannst bei dir sniffen und bei deinem Freund sniffen, und die Ergebnisse mit dem Vergleichen, was du erwartest, und wenn irgendwas nicht passt, dann weißt du, wo du den Fehler zu suchen hast.

10.10.2011 - 21:46 Uhr

Die Idee finde ich auch sehr gut!

10.10.2011 - 21:45 Uhr

Das kannst du am besten rausfinden, indem du durchdebuggst. Wird das richtige Verzeichnis zurückgegeben, werden Dateien gefunden, werden Exceptions geschmießen? Oder erwartest du etwa, dass sich jemand die Arbeit für dich macht und dir einfach sagt, wo der Fehler ist?

09.10.2011 - 16:54 Uhr

"leicht selber rausbekommen" ist aus meiner Sicht immer subjektiv.

Ich habe mich allerdings auch gewundert, dass du die Lösung nicht selber gefunden hast. Du weißt ja anscheinend schon, was Reflection ist, dann ist es doch anzunehmen, dass du auch weißt, dass das Ding in eckigen Klammern ein Attribut ist. Und da ist es nicht abwägig, nach Refelection + Attribute zu suchen. Wenn dir der Begriff Attribut nicht bekannt war, hattest du doch zumindest die PropertyInfo Klasse an der Hand und hättest schnell durchschauen können, was für Methoden/Eigenschaften die hat.
Ich sage das nicht, weil ich darauf rumreiten will. Ich will dir nur paar Möglichkeiten zeigen, wie du die Antwort selber finden könntest, weil das finde ich sehr wichtig. Ich sehe hier (und nicht nur hier) sehr oft Fragen, wo ich mir denke, die Antwort zu ergoogeln hätte einen Bruchteil der Zeit gekostet. Die Antwort selber finden zu können ist sehr wichtig, finde ich.

09.10.2011 - 16:50 Uhr

Naja, dass die Versionen nicht zusammenpassen ist ja logisch. Auf der einen Seite hast du einen Release, also etwas was von den Entwicklern als abgeschlossene Zwischenversion herausgegeben wurde. Auf der einen Seite hast du einen Nightly Build, eine gerade aktuelle Version. Und die ändert sich ständig.

Wegen MS Access... Das ist halt etwas "anders" als normale Datenbanken. Die fühlt sich anders an und funktioniert etwas anders. Und die funktioniert nicht (so richtig zumindest) unter 64Bit. Jede andere Alternative ist besser 😃

08.10.2011 - 18:14 Uhr

Du solltest Parameter verwenden und die Statements nicht direkt zusammensetzen. Abgesehen davon ist dein Code für die einfachste Art von Sql Injection anfällig.

Falsch Syntax deutet zunächst einmal darauf hin, dass die Syntax falsch ist 😉 Ich vermute fast, ID ist ein numerischer Wert und kein String. Und was du noch falsch machst, du nimmst als ID den Wert von DataValueField. Das ist ja nur der Name der Spalte, den du auch zuvor gesetzt hast. Was du brauchst, ist SelectedValue.

08.10.2011 - 15:59 Uhr

Erstens heißt es Endlosschleife und nicht "Unendlichkeitsschleife", und zweitens stimmt das einfach nicht. Das würde sehr wohl funktionieren. Du machst einfach was falsch. Wie schaut denn deine "Unendlichkeitsschleife" aus? while (false)?

08.10.2011 - 15:57 Uhr

Ich versteh nicht, warum du nicht einfach die inner exception gepostet hast, wie ich gesagt habe. Es ist nämlich viel einfacher für dich, die Exception rauszukopieren und hier einzufügen, als für andere, das Projekt runterzuladen, zu entpacken und schauen wie man das zum Laufen bekommt.
Die Exception besagt, dass NHibernate.JetDriver oder eine Abhängigkeit davon nicht gefunden wurde. Ist es bei dir auch so. Dann ist die Lösung hier beschrieben:

NHibernate and MS Access

07.10.2011 - 22:29 Uhr

Ich weiß nicht, inwiefern dir das weiterhilft, aber sowas hab ich paar mal unter Linux verwendet:

Fun with beep

In dem Beispiel ist halbwegs beschrieben, wie das funktioniert, aber ich kann jetzt selber schlecht beurteilen, wie einfach du das übertragen kannst.

07.10.2011 - 19:55 Uhr

Ich denke, es würde reichen, wenn du du die Inner Exception hier postest.

07.10.2011 - 17:33 Uhr

Bist du sicher, dass es der Compiler macht? Ich hab jetzt schon länger kein neues Hibernate Projekt mehr aufgesetzt, aber ich bin mir ziemlich sicher, dass die Mapping Dateien zur Laufzeit geparst werden. Und dann siehst du in der inner Exception auch ziemlich genau das Problem.

07.10.2011 - 16:14 Uhr

Das wird wahrscheinlich die Abhängigkeit einer anderen Bibliothek sein, die du benutzt. msvcp60.dll ist schon sehr alt. Was hast du denn sonst für Abhängigkeiten?

06.10.2011 - 22:40 Uhr

Ich hab nicht gemein, dass dein Plugin ein Singleton wird, sondern deine Hauptanwendung, bzw. eine Schnittstelle zur Hauptanwendung.

06.10.2011 - 17:32 Uhr

Ja ganz einach, du holst dir mit GetConstructors die Liste der Konstruktoren, gehst sie durch und schaust obs einen ohne Parameter gibt.

06.10.2011 - 16:27 Uhr

Hallo Cerole,

ich finde deine Formulierungen auch etwas schwierig... So wie ich das Problem verstande, gäbe es die (an sich wenig elegante) Möglichkeit, das über ein Singleton zu lösen, das von der Host-Anwendung bereitgestellt wird. Damit hätten deine Plugins eine direkte Abhängigkeit zur Host Anwendung, was überhaupt nicht schön ist, aber wenn du nichts anderes findest, würde es so funktionieren.

05.10.2011 - 15:45 Uhr

Das macht keinen Sinn. Allein schon, weil du doppelt so viel Speicher brauchst, und weil das alles 5 mal so umständlich ist.

05.10.2011 - 15:12 Uhr

Du machst was falsch... "Hex" ist nur eine Darstellung (für den Menschen), das hat nichts mit dem Wert der Zahl zu tun, den du in dem Byte, bzw. Byte Array speicherst. Wenn du einen Int in Bytes zerlegen willst, brauchst du entweder shift Operationen oder einfach die BitConverter Klasse.

04.10.2011 - 22:18 Uhr

Aber worauf achten "Personaler" heute in "unserem" Bereich?

Ich möchte die Frage mal mit einer Gegenfrage beantworten. Willst du denn überhaupt in einer Firma arbeiten, in der auf solche Zertifikate Wert gelegt wird? Ich kann aus eigener Erfahrung nur sagen, dass ich bisher keine Firma gesehen habe, wo sowas irgendeine Rolle gespielt hat. Bisher liefen alle meine Vorstellungsgespräche sehr locker ab, und nicht nur in kleinen Firmen. Ich könnte mir schon Firmen vorstellen, wo solche Zertifikate Eindruck machen würden. Allerdings wärst du dann wohl in einer Situation, wo dein Vorgesetzter eher wenig Ahnung von der Materie hat und es würde dann in der Arbeit (überspitzt gesagt) mehr auf politische Machtspielchen denn auf wirkliches Fachwissen ankommen.

04.10.2011 - 15:45 Uhr

Auf deine Frage weiß ich keine Antwort, und ich bin mir auch gar nicht sicher, ob das überhaupt geht.
Ich möchte dich aber darauf hinweisen, dass das jetzige Verhalten so durchaus Sinn macht.
Was ist, wenn jemand folgendes eintippen möchte:


blub.TestEigenschaft = new TestFactory().createTestObject();

TestFactory implementiert ITest nicht, ist aber ein gültiger Wert. Das ist nur ein Beispiel, man könnte z.B. auch den Cast Operator überladen, oder auch irgendeinen anderen Operator, der das entsprechende Objekt zurückgibt, so in der Art:


blub.TestEigenschaft = new NichtTest() * 5;

Also, wenn du schon solche Erweiterungen machen willst, dann eher die Einträge vorsortieren, und nicht komplett ausblenden. Aber wie gesagt, bin mir gar nicht sicher, ob Visual Studio hier überhaupt Eingriffmöglichkeiten bietet.

02.10.2011 - 00:00 Uhr

Das ist gar kein Stiel. Ein Stiel ist angehängt 😃.

ROFL

01.10.2011 - 23:06 Uhr

Warum sind A und B abstrakt?

01.10.2011 - 21:43 Uhr

Ich bin mir nicht sicher, ob ich dich richtig verstanden habe. Aber im Endeffekt zeigst du mit dem PropertyGrid ja nur die Eigenschaften einer Klasse/Instanz an. Und mit deiner zweiten Form bearbeitest du eine Eigenschaft. Kannst du nicht statt dem Objekt, das die Eigenschaft repräsentiert, gleich das eigentlich Objekt an sich übergeben?

30.09.2011 - 21:26 Uhr

@ModelViewPresenter: Die Punkte, die du aufgeführt hast, hatte ich schon in meinem Studium. Es kommt eben auf die Uni/FH an. Das schöne ist ja eigentlich, dass man sich aussuchen kann, was man macht und auch die Möglichkeit hat, verschiedenes auszuprobieren. Nur kommt es in der Praxis dann doch sehr stark auf die konkreten Profs an, und wenn die Uni nicht besonders groß ist, muss man mit dem leben, was man angeboten bekommt. Ich hatte auch Vorlesungen, die Softwaredesign hießen und auf dem Stand der 70er Jahre waren. Trotzdem kann ich den Prof, der diese Vorlesung gehalten hat, gut verstehen. Er war sicher nicht dumm, aber die neueren Entwicklungen sind völlig an ihm vorbeigagangen und interessieren ihn einfach nicht. Einerseits ist es natürlich etwas komisch, wenn man als Informatiker neue Entwicklungen nicht mitverfolgt und sich nicht dafür interessiert. Andererseits hat er an umfangreichen und hochkomplexen Projekten mitgearbeitet (und arbeitet immer noch), die in C geschrieben sind und da kann ihm kein Grünschnabel von der Uni das Wasser reichen, der sich mit Dependency Injection und Unit Testing auskennt. Im Endeffekt hat die Vorlesung wohl wenig bis nichts für die Praxis gebracht, aber es hat sicher nicht geschadet, sich seine Ansichten anzuhören.
Grad weil diese Sachen die Basics darstellen, finde ich es gar nicht so wichtig, sie im Studium zu lernen. Das kann man sich sehr leicht selbst beibringen. Ich würde da eher s8jascho Recht geben.

28.09.2011 - 11:51 Uhr

Das müsste schon gehen, wenn du dich mit dem Host Prozess verbindest. Wüsste nicht, warum es nicht gehen sollte.

28.09.2011 - 10:04 Uhr

Ja, codeproject und google. Wenn du da nichts findest, dann nicht.

28.09.2011 - 00:11 Uhr

Ohne mir deinen Code genauer anzuschauen, probier


this.Controls.Add(PreviewContainer);

statt Form1.ActiveForm

26.09.2011 - 21:45 Uhr

Naja, rsync ist das Standardtool im Linuxumfeld, gibts auch für Windows.

Aber warum synchronisierst du nicht über SVN, wo du es anscheinend eh schon benutzt?

26.09.2011 - 21:24 Uhr

Schreib noch bitte dazu, woran das jetzt genau lag. Der nächste, der über den Thread stolpert, wird denk ich etwas verwirrt sein.

26.09.2011 - 20:50 Uhr

Sowas wie


this.Controls.Add(schlager);

müsste schon reichen. Ich seh jetzt spontan keinen Fehler... Wird das Bild denn richtig geladen? Kannst du da reindebuggen und dir z.B. die Breite und die Höhe ansehen? Es gibt auch Debugger Visualizer, die Bilder anzeigen können.

26.09.2011 - 20:27 Uhr

Wo willst du die Picturebox denn anzeigen (mal davon abgesehen, dass das Vorgehen sinnlos ist)? Du musst sie einem Control hinzufügen, z.B. der Form.

24.09.2011 - 23:30 Uhr

Ich wollte mal fragen ob wer weiß, wie ich die Größe eines Anwendungsfensters herausbekomme.

Ja.

Das Problem, ich brauche es nicht in der Anwendung, der das Fenster gehört sindern in einer Anderen.

Benutz die Forumssuche, wurde schon unzählige Male besprochen.

24.09.2011 - 23:28 Uhr

Ja, sag halt gleich, was dein Problem ist 😉 Deinen Code versteh ich übrigens nicht.

Ich hätt die Progressbar einfach abstrahiert, durch eine Schnittstelle, und den Threads diese Schnittstelle zum aktualisieren gegeben. Deine Form könnte dann z.B. diese Schnittstelle implementieren.

Ohne groß zu überlegen, in etwa sowas:


interface IProgressObserver
{
    void nextStep();
}

partial class TheForm: Form, IProgressObserver
{
    ...
    public void nextStep()
    {
        JobProgressBar.Invoke(UpdateProgressBar);
    }
}

public void UpdateProgressBar()
{
    JobProgressBar.PerformStep();
}

24.09.2011 - 22:55 Uhr

Was hast du denn probiert? Wenn du tatsächlich was drüber gelesen hast, dann sollte es ja überhaupt kein Problem sein.
Hast du das schon gelesen?
[FAQ] Controls von Thread aktualisieren lassen

24.09.2011 - 16:36 Uhr

Wie gesagt, Dependency Injection.

Und wenn eine Klasse "weiß", was zu tun ist, ist es eigentlich schlecht. Weil normal haben die meisten Klassen externe Abhängigkeiten. Eine etwas komplexere Klasse kann üblicherweise nicht ohne weiteres erzeugt werden, sie hat Abhängigkeiten zu anderen Klassen. Diese Abhängigkeiten sollte man auflockern, indem man gegen Schnittstellen und nicht gegen Konkrete Implementierungen programmiert und konkrete Instanzen erzeugen lassen. Dafür verwendet man Dependency Injection.

24.09.2011 - 15:55 Uhr

Die Factory muss es wissen. Der Vorteil ist an der Stelle, dass man es nur an einer Stelle wissen muss, und nicht überall, wo man eine Instanz benötigt.

24.09.2011 - 15:30 Uhr

Nein, du brauchst nicht unbedingt eine Factory pro Klasse. Eine sollte reichen.

Im Endeffekt geht es dir doch nicht darum, aus der Instanzmethode eine statische Methode zu machen, sondern dass der Client die Methode aufrufen kann, ohne explizit eine Instanz zu haben. Zumindest sollte es darum gehen ^^ Das ist üblicherweise ein Punkt, wo du über Dependency Injection nachdenken solltest (oder Service Locator oder [abstrakte] Factory, wenn dir Dependency Injection zu viel ist).