Laden...
M
MasterOfDesaster myCSharp.de - Member
Softwareentwickler Erlangen Dabei seit 07.12.2005 68 Beiträge
Benutzerbeschreibung

Forenbeiträge von MasterOfDesaster Ingesamt 68 Beiträge

20.08.2007 - 16:17 Uhr

Hallo,

ich habe eine Desktopanwendung welche ein WebBrowser Control beinhaltet um eine Karte von Google Maps anzuzeigen.

Um das hinzukriegen habe ich mir eine kleine HP gebastelt welche mit JavaScript die Google Maps API nutzt. Nun wollte ich mir eine Route anzeigen lassen, Google bietet folgende Möglichkeit dafür (neben den kml Dateien):


var polyline = new GPolyline([  new GLatLng(37.4419, -122.1419),  
                                             new GLatLng(37.4519, -122.1519)], 
                                             "#ff0000", 10);
map.addOverlay(polyline);

Soweit sogut, mein Problem ist nun: Wie bekomme ich meine Koordinaten aus der Anwendung zur HP?

Meine Gedanken:

Es gibt im Browser ein Property ObjectForScripting da hätte ich die Koordinaten reingeschrieben. Mit JavaScript kann ich die Koordinaten auch über window.external... auslesen. Aber leider gibt es soweit ich weiß keine Add Methode oder dergleichen an der GPolyLine (irre ich mich da?), also muss ich ja im Konstruktor bereits alle Punkte angeben -> Blöd.

Die zweite Möglichkeit bestünde darin mit PHP die Koordinaten auszulesen, und mit echo den JavaScript Code dynamisch zu erzeugen. Da weiß ich leider nicht wie ich auf die Koordinaten zugreifen kann.

Die dritte Möglichkeit wäre den Code von der HP runterzuladen und in meiner Desktopanwendung anzupassen. Also sprich ich würde mir einfach eine leicht zuerkennende Marke setzten und ab da den JavaScript-Code einfügen. Geht das???

Wäre nett wenn ihr mir etwas helft von der Leitung runterzukommen, ich stehe grad voll drauf.🙂

mfg

09.05.2007 - 12:26 Uhr

Die Stopwatch Klasse implementiert im Übrigen den QueryPerfomanceCounter. Das der auch nur eine beschränkte Genauigkeit hat ist ja wohl klar. Was genaueres kriegst aber imho nicht mit normalen Windowsmittlen.

mfg MasterOfDesaster

26.04.2007 - 10:43 Uhr

Hallo,

also das Problem war nicht das Überschreiben oder sowas, mittlerweile übersteigt der Aufwand jedoch den Nutzen.
Die Einrückungen sind nicht ganz so leicht zu machen wie ich erst dachte.
Aus diesem Grund habe ich dann geschaut (Reflector) wie macht es Microsoft.
Der Versuch den Code zu übernehmen und an den paar Stellen anzupassen scheiterte an viel zu vielen Abhängigkeiten interner Klassen. Wen wunderts auch.

Meine Lösung war jetzt folgende sehr unschöne:

  1. ändern der Dateien per Programm
  2. öffnen der Solution in VS2005
  3. alle Projekte markieren
  4. eine Einstellung ändern, die in allen *.vcproj Dateien vorkommen
  5. speichern
  6. zurück ändern
  7. speichern

das Studio formatiert das ganze nach seinen Wünschen.
Eine stupide Lösung, die mich nicht zufrieden stellen kann, aber naja.
Ich hoffe jetzt nur das ich nicht doch nochmal dringend die Programmlösung brauche.

Danke auf alle Fälle für deine Unterstützung @kleines_eichhoernchen

mfg MasterOfDesaster

24.04.2007 - 14:49 Uhr

Also ich gebe hier mal meine Erfahrungen weiter:

ich habe ein Klasse von XmlTextWriter abgeleitet.
Ich habe mir nur ein paar Methoden überladen:
WriteEndElement
WriteFullEndElement

Damit habe ich dann die Newlines hinbekommen.
Allerdings zwei Probleme:
Die Einrückung war an den Stellen hinüber (hätte ich nachbearbeiten können)
XmlTextWriter hat bei dem Property Settings nur get implementiert.
Dadurch ging mein NewLineOnAttribut wieder verloren.

Also habe ich noch versucht die Methode
WriteAttributes
zu überschreiben, da geht er aber nie rein.

Kann sein das ich das falsche überlade, aber ich glaube auch das es doch noch eine andere Möglichkeit geben muss. MS macht es doch auch 🤔

23.04.2007 - 20:45 Uhr

Danke, das werde ich mal probieren morgen.
Ich berichte dann...

23.04.2007 - 16:00 Uhr

Nach langen google (und co) Sessions ahbe ich mehrere Foreneinträge gefunden die die selben Probleme haben. Aber nirgendwo ist eine Antwort dazu. X(
Weiß wirklich keiner Bescheid???
Mein nächster Ansatz wäre jetzt über Regex die EndeTags rauskriegen und davor ein '\n' zimmern, das ist aber nur ne Notlösung.

Also jetzt rückt schon raus mit den geheimen Tipps 😉

mfg MasterOfDesaster

20.04.2007 - 13:24 Uhr

Hey ho,

weiß vlt. noch einer wie ich es hinbekomme das, dass EndeTag auf eine neue Zeile kommt?
Ich habe jetzt
xWriteSett.NewLineHandling = NewLineHandling.None;
angewählt gehabt aber er verändert es trotzdem X(

20.04.2007 - 10:57 Uhr

Rein aus Interesse wie generiert man ein Programm in den Arbeitsspeicher und startet es??
Wi eman zu dem Programm kommt wäre vlt. gar nicht so schwer. Man schreibt es in seiner Ide -> kompiliert -> öffnet es im Hexeditor -> kopiert -> und jetzt muss man den Code in den Arbeitsspeicher kriegen -> also ne Variable erstmal z.B. BinaryStream, oder?

Aber wie jetzt starten?????

ich finde das Thema interessant, auch wenn ich es wahrscheinlich nicht so schnell gebrauchen werde 😁

mfg MasterOfDesaster

PS: Das ganze klingt nach einem bösartigen Programm 🤔 🤔

18.04.2007 - 14:31 Uhr

Es sieht so aus als bräuchte ich nochmal Hilfe, und zwar möchte ich gern eine Datei händisch "deployen". Ich habe zwar eine Möglichkeit gefunden um händisch den Deploy-Vorgang anzustoßen aber ich möchte gern einfach eine Datei zu den "zu veröffentlichenden Dateien" hinzufügen. Leider hat mir weder Msdn, forum, Google geholfen.

Ich weiß das es in den einstellungen eine Möglichkeit gibt zusätzliche Dateien über das Deploy zu veröffentlichen. Allerdings scheint mir das ungeeignet, da die Dateien von Einstellungen abhängig gemachtn eingetragen werden müssen, muss ich an Einstellungen vom VS2005 ran und habe mich deswegen für ein AddIn entschieden. Jetzt stelle ich den Pfad ein beim öffnen der Solution, aber dann will das Studio logischerweise neuladen, was wieder sehr sehr lange dauert.

Gibt es eine Möglichkeit das anders zu beeinflussen?
Warum ist das eingentlich alles so schlecht dokumentiert in der MSDN?
Gibt es gute Tutorials?

mfg MasterOfDesaster

17.04.2007 - 14:29 Uhr

Ohhhhhhh mannnnnn

jetzt hab ich es gesehen!!!!

vsBuildAction hilft mir doch ein ganzes stück weiter 😁

Danke Danke!!!!!

17.04.2007 - 14:07 Uhr

Hallo Tom_Mue:

Ich weiß schon das du den Artikel geschrieben hast, dumm nur das das Heft zu Hause liegt und ich auf Arbeit bin 😁

Das mit dem Event wieder abmelden ist korrekt das ich das nicht habe, aber ansonsten:

ansonsten ist mein events(vom Typ CommandEvents) ja nur eine Referenz auf _applicationObject.Events ... von daher dachte ich würde er das schon noch behalten nach der Methode.

Das Event OnBuild habe ich auch gefunden, und ich suche genau das Pendant für deploy. Leider finde ich es nicht. Ein Deploy ist ein eigenständiger Befehl, zumindest ein eigener Button 😄. Dieser schaut nach ob alles kompiliert ist und kompiliert ggf.
Wenn es in den BuildEvents drinnstünde wäre es zu einfach, da habe ich schon geschaut

aber danke für deine Hilfe

17.04.2007 - 12:54 Uhr

Hallo,

ich bin dabei ein Addin zuschreiben für das VS2005, dieses soll reagieren sobald man auf deploy klickt bzw. f5 drückt. Es handelt sich um SmartDevice-Solutions, die vor dem Debuggen erstmal auf da Gerät kopiert werden müssen.

Leider finde ich kein passendes Event dafür 🙁 Deshalb habe ich es wie folgt versucht:


Commands commands = _applicationObject.Commands;
            Command com = null;
            string s = string.Empty;
            foreach (Command c in commands)
            {
                if (c.Name == "Build.Deploy")
                    com = c;
                if (c.Name.IndexOf("Build") == 0)
                    s += c.Name + Environment.NewLine;
            }
            MessageBox.Show(s);
            
            
            CommandEvents events = _applicationObject.Events.get_CommandEvents(com.Guid,com.ID);
            events.BeforeExecute += new _dispCommandEvents_BeforeExecuteEventHandler(events_BeforeExecute);

aber in die Methode events_BeforeExecute() komme ich nie, egal ob ich klicke oder ob ich per F5 das Deployment anstoße.

Warum funktioniert es nicht so? Und wie wie würde es funktionieren? Gibt es vlt. ein eigenes Event, wie z.B. OnDeployStarted 🙂? Gefunden habe ich auf alle Fälle nichts in der MSDN und im Inet

mfg MasterOfDesaster

16.04.2007 - 08:46 Uhr

Der C# Compiler ist etwas konsequenter, da z.B. mit dem MS C++ Compiler im VC++6.0
folgendes ging:


for(int i=0; i < 10; i++)
{
}
cout<<i<<endl;

anscheinend gab es also Probleme bei den Gültigkeitsbereichen, ich kann mir vorstellen das deshalb die obengenannte Designentscheidung getroffen wurde.
Mittlerweile meckert der C++ Compiler bei obigen Code aber. Dies lässt sich aber ausschalten, aus Kombatibilitätsgründen 🙂

mfg MasterOfDesaster

12.04.2007 - 08:20 Uhr

danke kleines_eichhoernchen!

👍 👍

genau das habe ich gesucht

mfg MasterOfDesaster

11.04.2007 - 17:29 Uhr

Mir ist noch etwas eingefallen:

ich habe den Spaß einfach umgedreht. Mit XmlDocument.Normalize() bekomme ich die Originaldateien in mein Format.
Ist zwar nicht so günstig, aber für mich zum checken reicht es erstmal.

Wenn trotzdem noch einer eine Idee hat wie ich meine dateien in das Originalformat bekomme wäre das natürlich ideal.

11.04.2007 - 17:14 Uhr

Hallo,

ich soll aus bestehenden xml-Files etwas herauslöschen. Zur Zeit sieht ein beliebiger Knoten so aus:

<Knoten
Name="bla"
weiteresAttribut="fu"
undNochEinWeiteresAttribut="blubber"
/>

Nach dem ich mit XmlNode.Remove() ein bissl gelöscht habe und dann mit XmlDocument.Save() speicher sieht der gleiche Knoten folgendermaßen aus:

<KnotenName="bla" weiteresAttribut="fu" undNochEinWeiteresAttribut="blubber"/>

syntaktisch richtig. Aber jetzt ist es unmöglich mit Windiff die Änderungen zu kontrollieren.

Der Code:


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(file.FullName);
//mache was mit dem xmlDoc...
 xmlDoc.PreserveWhitespace = false;
xmlDoc.Save(file.FullName);

Hat jemand eine Idee wie ich meine neuen XML-Files in dem gegebenen Format erstelle?

10.04.2007 - 14:20 Uhr

Hallo,

ich möchte die PreprocessorDefinitions von C++Projekten auslesen und bearbeiten.
Es gibt projektweite Einstellungen und dateiweite. Diese können vererbt werden.

Schau ich mir die *.vcproj Datei an (XML) sehe ich die verschiedenen Plattformen in Release und Debugversionen. Soweit sogut. Allerdings kann ich die PreprocessorDefinitions nur von Debug|Win32 und Release|Win32 auslesen. Allerdings sind das genau die die mich am wenigsten interessieren. Bei den anderen Plattformen bekomme ich das VCCLCompilerTool nicht, aber in der *.vcproj steht es drin.
Nun kann man sich denken hey dann mach es doch mit xml und xpath. Prinzipiell ja, aber leider stehen in den Projektdateien nicht alle Makros drin. Setzt man zum Bsp. an den ATL oder MFC einstellungen steht dies schon in der *.vcproj aber nicht unter PreprocessorDefinitions. Wenn man sich die PreprocessorDefinitions mit der Klasse VCCLCompilerTool anschaut werden die Einstellungen in die Makros aufgelöst.

Kann mir jemand helfen, hat das schon mal jemand gemacht?

mfg

20.03.2007 - 12:45 Uhr

OK, verstehe.

In der aktuellen Ausgabe des Dot Net Magazins ist ein Aritkel über Speedtrace. Damit soll man Bottlenecks erkennen und auch Memory Leaks, jetzt wo ich weiß wie die entsteheh 😉

Habe es selber noch nicht probiert, nur den Artikel überflogen

20.03.2007 - 10:18 Uhr

So weit meine Kenntnisse reichen, kann es aufgrund des Garbage Collector keine Memory Leaks geben. In C++ geht das natürlich.
In C# muss man imho "nur" die Systemressourcen immer wieder freigeben, also immer schön Dispose aufrufen.

mfg MasterOfDesaster

EDIT: Rechtschreibfehler raus 😉

18.03.2007 - 14:41 Uhr

@marsgk: Der Artikel stimmt mich ja nicht gerade positiv 🙁
Naja es scheint erstmal zu funktionieren, wobe ich schon etwas "schummeln" muss.
Ich muss schon ein paar µs weniger warten als der Takt minmal breit sein sollte. Aber das hängt evtl. auch mit Codelaufzeiten zusammen. irgendwie muss aus meinem port.DtrEnable = true; ja auch noch ne spannung erzeugt werden.

18.03.2007 - 14:27 Uhr

Original von Traumzauberbaum
Naja ne gewissen Anfälligkeit ist auf nem Multi Tasking Betriebssystem nicht auszuschalten. Wenns blöd läuft und der PC entsprechend ausgelastet ist.

Nicht unbedingt. Das nicht alles superschnell, und innerhalb einer gewissen Zeit fertig ist ist klar. Aber die Dinge die eilig sind müssen halt rechtzeitig fertig sein. Bei entsprechendem Scheduling, prioritätsgesteuert und unterbrechend z.B., klappt es, zumindest mit dem höherprioren Threads. Bei Windows hast du meine volle Zustimmung, acuh bei CE. Linux kann glaube ich auch recht gut echtzeitfähig gemacht werden.

17.03.2007 - 18:14 Uhr

Ich bin mal davon ausgegangen, das das ThreadPriority.Highest entspricht.
Von daher habe ich das schon.
Aber echte Echtzeit wird man damit definitiv nicht erreichen 😉

17.03.2007 - 16:40 Uhr

Es scheint zu funktionieren.
Mal abwarten wie es sich in den nächsten Tests schlägt 😁

mfg MasterOfDesaster

17.03.2007 - 15:49 Uhr

Das habe ich in der Zwischenzeit auch probiert.
Allerdings nicht mit dem normalen Timer sondern mit dem HighPerfomanceCouner
Ich muss noch messen, deswegen kann ich noch kein Ergebniss sagen.

Der normale Timer ist (angeblich) zu ungenau, wegen der Auflösung.

17.03.2007 - 14:40 Uhr

Hallo,

ich habe ein Problem: Und zwar soll ich einen Takt an der Seriellen Schnittstelle erzeugen. Und zwar an den Pins RTS und DTR. Dass heisst da geht nichts über die Baudrate (oder??, wenn ja wäre es gelöst). Das Problem ist jetzt einfach die Zeit, und zwar soll ich Periodendauern zwischen 0.5ms und 1ms erstellen.
Meine Frage wie bekomme ich das hin. Also, so das es auch auf jeden Rechner so ist, also nicht einfach ne for-schleife 😁 😁 😁 so das es zufällig grade bei mir passt.

Meine bisherigen gedanken:
1.erstmal mit Thread.Sleep(new Timspan(500000)); //für 0.5 ms // da lag ich um den faktor 100 daneben 1.dann habe ich aktives warten probiert:
DateTime start = DateTime.Now;
//ein tick entspricht 100 Nanosekunden
while(((DateTime.Now - start).Ticks/10) < microSeconds)
;
Das hat die Periodendauer ungefähr halbiert (zu oben)

1.Ein Echtzeit-OS muss her!? Windows CE? Ein eigenes (habe ich mal or ner Weile angefangen, wäre echtzeitfähig da es nichts macht außer das 😁

Die ersten beiden Lösugen waren nur mal so Versuche um eben abzuchecken wieviel fehlt. Dabei war mir klar das es nicht klappt.
Achso und der Thread in dem das ist hat schon die höchste Priorität.
Das mit WinCE wäre eine Idee, aber auch net so das wahre.
Ds mit dem eigenen OS. Ist nur so daher gesponnen, da derjenige für den das ist wohl kaum ein OS installieren möchte was ncihts kann 😁 außer ein bissl was senden.

Gibt es noch eine andere Möglichkeit als ein anderes OS, vlt. mit einem Treiber???

mfg

01.03.2007 - 12:05 Uhr

Ein weiteres Buch welches komplett auf den Designer verzichtet:
http://www.amazon.de/Objektorientiertes-Programmieren-methodische-Einführung-Fortgeschrittene/dp/3866454066/ref=pd_ka_1/303-9993345-8922668?ie=UTF8&s=books&qid=1172746953&sr=8-1

*werbetrommelnschlagen*
Ich bekomme keine Provision, auch wenn es mein Lehrer ist 😉

mfg

04.02.2007 - 13:40 Uhr

Okay,

mir schlichtweg das Delgate ParameterizedThreadStart unbekannt. Danke an euch für die Denkanstöße!

Gruß MasterOfDesaster

04.02.2007 - 12:34 Uhr

@AtzeX: Das war auch mein erster Lösungansatz allerdings habe ich den dann doch wieder verworfen, weil es halt keine richtige eigene Klasse wäre. Soll heissen der Konstruktor hätte mindestens 7 Argumente, weil die Methode GetTrackContact einfach soviele Member nutzt.

@Traumzauberbaum: Danke für den Tipp mit dem AutoResetEvent, und das Parameter doch gehen. Ich denke eine von den beiden Möglichkeiten wird funzen. Die Idee mit dem ThreadPool werde ich aufgreifen wenn ich in der Nacht von Montag zu Dienstag langweile habe (Am Dienstag ist nämlich Abgabe des Projekts).

Danke auf alle Fälle an euch beide

04.02.2007 - 11:26 Uhr

Hallo Leute,

also ich denke die Grundprinzipien von Threading begriffen zu haben, inkl Monitor und so weiter.

Aber ich habe folgendes Problem:


class c
{
     private int address;
     public void blubb(int address)
    {
         this.address = address;
         Thread t = new Thread(new ThreadStart(this.GetAddress));
         t.Start();
    }

    public void GetAddress()
   {
          int adr = this.address;
          //ganz viel code
   } 
}

Also da ich einen Thread keinen Parameter übergeben kann habe ich den als Membervariable von der Klasse gemacht. Ich weise das dann wieder in GetAddress einer lokalen Variable zu damit blubb erneut aufgerufen werden kann, ohne den "alten Thread" zu beeinflussen.
blubb ist ein EventHandler der oft, aber unregelmäßig aufgerufen wird.
Das Problem was ichn sehe:
Es kann blubb nochmal aufgerufen werden zwischen t.Start() und der Kopie auf die lokale variable von addresse, oder?
In diesem Falle würde die "alte" Adresse verloren gehen.

Hat jemand eine Idee? Vielleicht kann man einem Thread ja doch irgendwie Argumente mitgeben oder so 😉. Monitoring nützt mir da glaube ich nicht wirklich weiter, da es ja über mehrere Methoden geht sozusagen.

mfg MasterOfDesaster

07.01.2007 - 15:07 Uhr

😁

LOL erst jetzt fällt mir auf das mein Name eigentlich falsch ist. Desaster heißt es im deutschen und disaster im englischen.

Naja egal, das passt schon so.

mfg

28.11.2006 - 11:21 Uhr

Hallo st@tic,

kann es sein das bei dir das Quell- und Zielbitmap das gleiche ist?

Zumindest kann ich so das Problem nachvollziehen.

Da muss ich mir noch etws einfallen, sorry

mfg

27.11.2006 - 16:50 Uhr

Ein was habe ich nochvergessen,

man muss jetzt nicht unbedingt eine textdatei angeben, sondern kann den Text auch direkt eingeben.

mfg

22.11.2006 - 22:20 Uhr

Okay dann habe ich wohl einfach nur nicht die Lösung kapiert von eichhörnchen.

Es funktioniert auf alle Fälle, danke euch

mfg

22.11.2006 - 22:02 Uhr

Der Anfang ist gemacht.

Deine Oopen Methode liefert allerdings immer true zurück wenn der Port bei uafruf noch geschlossen ist. Da solltest du nochmal den Zustand abfragen und weiterleiten.
Deine Write und read Methoden leiten die Daten im Moment nur weiter, das ist denke ich nicht zweck der Aufgabe. Genau da musst du ins Protokoll gehen. Z.B das senden des zeichens "D" zur Initialisierung.

EDIT: habe mir nochmal das UML Diagramm angeschaut bzw. die Beschreibung da kommt das nicht so rüber als ob die Klasse cSerial an das Protokoll angepasst werden soll. Die Klasse macht in meinen Augen aber nur dann Sinn, da man das ansonsten ja nur weiterreichen muss.

Was problematisch werden könnte ist die Stromversorgung mit DTR und RTS, keine Ahnung ob SerialPort da was bietet.

Dann fehlt noch ein bisschen Fehlerbehandlung.

Aber ansonsten passt das schon so in etwa.

22.11.2006 - 21:40 Uhr

kann mir keiner helfen ?
X( X(

Ich wäre echt dankbar für einen Tipp.
Codeproject spuckt auch nichts richtiges aus. 🙁

mfg

22.11.2006 - 21:37 Uhr

Original von Xenon

Ich habe alle notwendigen Daten wie Baudrate, Parity, Start und Stopbits etc.

Es gibt keinen HArdwareHandshake.

das wichtigste fehlt aber noch, denke ich. kennst du denn das Protokoll mit dem das Messgerät arbeitet?

Wäre ganz nett, wenn du mal zeigen könntest wie du den Verbindungsaufbau machst?

das wichtigste was du brauchst ist meiner Meinung nach das Protokoll des Messgerätes. es reicht ja nicht irgendwas zu sende oder zu empfangen. Du und das Messgerät müssen das acuh richtig deuten. Evtl musst du auch eine flusskontrolle programmieren oder ähnliches.

Das du Senden kannst obwohl nichts angeschlossen ist kann ich mir gut vorstellen.

mfg

22.11.2006 - 19:46 Uhr

Mist da war jemand zu schnell 😉

also bei:

struct bla
{
public int fu;
public char blubb;
}

//Methode

bla b = new bla();

ist schon alles auf 0 bzw '\0'

22.11.2006 - 18:50 Uhr

Ich glaube er sucht etwas wie memset in C++

siehe hier

der MemoryStream könnte dir da evtl helfen (siehe die Write Methode)
mfg

22.11.2006 - 18:41 Uhr

Also ich habe die MSDN nur kurz überflogen habe aber keine brauchbare infos gefunden.

kannst du mla bitte kurz beschrieben was fillChar machen soll, und vor allem in welchem Kontext??

22.11.2006 - 18:01 Uhr

Ich habe mein Design jetzt noch etwas geändert. es sieht jetzt wie folgt aus:

der OpenFileDialog wird innerhalb der Asynchronen Methode aufgerufen -> gleiches Problem, aber ich brauch bloß noch zwei statt 4 asynchrone Methoden 😉

Aber was jetzt acuh ein bissl merkwürdig ist, wenn der debugger wegen der beschriebenen Exception anhält ist die Zeile grün anstatt gelb markiert ?( ?(🤔

Könnt ihr mir die Bedeutung vlt auch noch erklären.

mfg

22.11.2006 - 17:35 Uhr

hmmm...

ich befürchte das ist noch nicht die Lösung, an einem Formobjekt gibt es zwar die Invoke methode aber ich komme von meinem OpenFileDialog nicht zu einem Form oder Control, oder?

An einem OpenFileDialog gibt es nach meinen Kenntnissen keine vergleichbare Methode 😦

PS: Ich benutze das Framework 2.0

Aber danke für die schnelle Antwort.

mfg

22.11.2006 - 17:08 Uhr

Ich habe mal noch ne Frage zu asynchronen Methoden STA und den OpenFileDialog.

Und zwar habe ich jetzt folgemdes Konstrukt: Ich rufe eine Methode asynchron auf (weil die halt zimelich lange braucht) nachdem ich diese aufgerufen habe muss, möchte ich in der Callback methode einen OpenFileDialog öffnen -> genau da kommt die bekannte Exception:

System.Threading.ThreadStateException was unhandled
Message="Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process."

usw.

Also schaute ich als erstes über der Main da stand natürlich ein [STAThread]
nun habe ich ein bissl versucht, und habe über alle Methoden die damit was zu tun haben ein "[STAThread]" geschrieben-> Ohne Erfolg.

hat jemand von euch eine Ahnung wie das zum laufen bekomme?
Ich habe schon darüber nachgedacht das mit Threads zu machen, würde aber mehr Aufwand bedeuten, deswegen wüsste ich gern ob ich damit das Problem überhaupt lösen kann.

PS: Ohne debugger funzt alles wunderbar, aber das ist halt nicht die Lösung vermute ich mal.

mfg

18.11.2006 - 23:01 Uhr

Aaalso,
nach langem Kampf habe ich es nun endlich hinbekommen.
Für alle die es interessiert, hier kommt der Code. Es ist bestimmt nicht der schönste aber er funktioniert, zumindest soweit wie ich ihn getestet habe.


using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Diagnostics;

namespace CryptoTest
{
    class Program
    {
        byte[] key = new byte[] { 12, 34, 23, 56, 23, 45, 12, 65 };
        byte[] key2 = new byte[] { 13, 32, 129, 251, 233, 145, 182, 65 };

        static void Main(string[] args)
        {
            Program p = new Program();
            string text = "Hallo das ist ein dummer test";
            string crypt = p.Encrypt(text);
            string text2 = p.Decrypt(crypt);

        }
        public string Decrypt(string text)
        {
            byte[] textBytes = StringToBytes(text);
            DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
            MemoryStream writeCryp = new MemoryStream();
            CryptoStream crypto = new CryptoStream(writeCryp, desProvider.CreateDecryptor(key, key2), CryptoStreamMode.Write);


            crypto.Write(textBytes, 0, textBytes.Length);
            crypto.FlushFinalBlock();

            byte[] resultBytes = writeCryp.GetBuffer();
            int len = Convert.ToInt32(writeCryp.Length);
            writeCryp.Close();
            crypto.Close();
            crypto.Dispose();


            string result = "";
            for (int i = 0; i < len; i++)
                result = result.Insert(result.Length, Convert.ToChar(resultBytes[i]).ToString());
            return result;
            
            
             
        }
        public string Encrypt(string text)
        {
            byte[] textBytes = StringToBytes(text);
            DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
            MemoryStream writeClear = new MemoryStream();
            CryptoStream crypto = new CryptoStream(writeClear, desProvider.CreateEncryptor(key, key2), CryptoStreamMode.Write);


            crypto.Write(textBytes, 0, textBytes.Length);
            crypto.FlushFinalBlock();
           
            byte[] resultBytes = writeClear.GetBuffer();
            int len = Convert.ToInt32(writeClear.Length);
            writeClear.Close();
            crypto.Dispose();

            string result = "";
            for (int i = 0; i < len; i++)
                result = result.Insert(result.Length, Convert.ToChar(resultBytes[i]).ToString());
            return result;
        }

        private byte[] StringToBytes(string text)
        {
            byte[] result = new byte[text.Length];
            for (int i = 0; i < text.Length; i++)
                result[i] = Convert.ToByte(text[i]);
            return result;
        }
    }
}

18.11.2006 - 15:32 Uhr

Hallo,

ich habe das Thema über die Suche gefunden und habe noch eine Frage dazu:

Und zwar möchte ich keine Dateien verschlüsseln, sondern ich habe einen String und möchte diesen verschlüsseln. nach dem verschlüsseln möchte ich mit den String weiterarbeiten. es wäre also für meinen Zweck sehr ungeschickt erst noch eine Datei zu erstellen und dann aus der Datei wieder zurückzulesen.

Hat jemand vielleicht eine Idee wie ich das geschickter hinbasteln kann?

mfg fabian

03.07.2006 - 21:02 Uhr

Falls es dir auf den Algorithmus ankommt hätte ich folgenden Vorschlag:
Du machst ein Array 0,1,2...9,a,b,...,f für die Hexziffern
Nun stimmt der Index des Arrays mit dem Wert der Ziffer überein. Das heisst du kannst über die Array.IndexOf Methode gehen und das ergebnis verrechnen da das ergebnis ja eine zahl zwischen 0 und 15 ist.
okay nicht besonders gut erklärt abe rmit viel Fantasie doch verständlich oder?

mfg MasterOfDesaster

06.03.2006 - 20:23 Uhr

Des Rätsels Lösung:

Also bei der Begründung muss ich ehrlich zugeben buin ich mir nicht ganz sicher, aber ich weiß wie es funktionieren sollte:

begründung: Bei deinem Aufruf der Funktion die was in deine Struktur schreiben soll wird eine Kopie erzeugt. Mit dem Aufruf:

extern void UseReceivedValues(char *PtrDaten, TImportStruct ImportDaten);

erstellst du eine Kopie von Importdaten die zufällig den gleichen Namen hat wie dein globale Variable Importdaten. Der Compiler nutzt aber immer die lokale Variable vorzugsweise.

Die Lösung: ich habe mal ein kleines Beispiel

Datei test.h:

  
#include <stdio.h> 

typedef struct 
{  	
      int x;
      int y;
} str, *pstr; 

void tue_was();

Datei main.c:



#include <stdio.h>
#include "test.h"

str neu;

int main()
{
     neu.x = 5;
     neu.y = 3;
     printf("x: %d\ny: %d",neu.x,neu.y);
     tue_was(neu);  	printf("\nx: %d\ny: %d",neu.x,neu.y);
     return 0;
}

Die datei tue_was.c


#include "test.h"
#include <stdio.h>

extern str neu;

void tue_was(str p)
{
      neu.x=8;
      neu.y=1;
}

Ich hoffe ich habe keinen Mist geschrieben und du kannst das Beispiel auf dein Problem übertragen

mfg fabian

Edit die globale Variable stört mich: 😁

also folgende Änderung: der Prototyp der tue_was Funktion lautet jetzt wie folgt:

void tue_was(pstr p);

Die Funktion selbst:

p->x=8;
p->y=1;

Der Aufruf der Funktion:

tue_was(&neu);

Und natürlich wird neu jetzt innerhalb der main deklariert.

23.02.2006 - 16:05 Uhr

Ja ich arbeite mit #Develop, und ich nenne das nicht herumärgern. Für alle nicht professionellen entwickler ist das auch ausreichend.

PS: und ich nutze #Develop trotz den Besitz der Lizensen von VS 2003 und 2005.

Um auf deine eigentlcihe Frage zurückzukommen: ich bekomme die Lizensen von Siemens, weil cih dort eine Ausbildung mache

22.02.2006 - 17:55 Uhr

Ich würde mal behaupten die Vs 2005 Express Versionen gibt es erst seit November oder Dezember letzten Jahres. Also zu einem Hype haben die nicht beigetragen. Und ich habe auch eine der ersten Versionen gehabt und die lief nciht instabil(zumindest denke ich das, wenn die Versionen wirklich November oder Dezember rausgekommen sind)

20.02.2006 - 16:20 Uhr

Original von ikaros
@MasterOfDesaster

Ich vermute: FIAN?

nicht ganz. Eine Ausbildung zum Datentechniker, siehe hier:STA Erlangen

Das mit dem Projekt ist ein guter Hinweis. Ich hoffe auch das meine Noten in Softwareentwicklung so bleiben. Dann hebe ich mich schon etwas ab von den anderen.

Allles weitere werde ich nächstes Jahr spüren

19.02.2006 - 17:21 Uhr

Und wie sieht es mit Einsteigern aus?
ich mache gerade eine Ausbildung bei Siemens, allerdings sind meine Aussichten da in der Softwareentwicklung übernommen zu werden gering. Wie sieht es in anderen Firmen aus?
Bin da sowieso noch am rätseln wie es in einem Jahr weitergehen soll. Bei Siemens bleiben und hoffen doch (vlt. irgendwann) die Traumstelle zu finden oder danach gleich in die .Net Branche wechseln.

Naja erstmal mache ich meine Ausbildung und sehe zu das ich mich zumindest konkurenzfähig mache zu den anderen Azubis.

mfg