Die Alternativen wären dann welche?
Durch frickeligen Code die Environmentvariablen in die Reg global ablegen?
Das wäre möglich, aber weder performant, noch empfehlenswert in meinen Augen!
Sorry wenn ich ein wenig auf dem Schlauch stehe, aber ausgehend von den Informationen in der MSDN gehe ich davon aus, dass ich momentan schon die MessageQueue von Windows benutze(z.B. durch SendMessage).
Ich finde aber in der MSDN nirgendwo eine Methode, mit der ich auch einen String übertragen könnte.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/postthreadmessage.asp
Mein eigentliches Problem ist, dass ich zwei Umgebungsvariablen des aufrufenden Prozesses auch in dem .NET-Prozess haben muss.
Gibt es vielleicht eine Methode an die Umgebungsvariablen eines anderen Prozesses zu kommen?
Grüße Christoph
Edit: SendMessage geht auch über ProcessGrenzen, man brauch dafür nur einen Handle auf das Fenster
Wie kann ich von Win32 aus denn in die MessageQueue schreiben?
Könnt ihr mir da mit einem API-Call helfen?
Hmm...
Auch wenn ich von dem .NET-Prozess nur lesend auf die Speicherbereiche zugreife und der C++-Prozess in dem Moment garantiert nichts tut?
Wie kann ich mir denn unter C++ Speicher reservieren und da einen String reinpacken?
Wie kann ich dieses Handle dann an .Net in einer int Variable übergeben?
Und wie kann ich in .NET daraus lesen?
Grüße, Christoph
Ne klar, stimmt schon!
Ist es möglich, bei den Parametern von SendMessage, die frei wählbar sind( vom Typ LParam und WParam, müsste soetwas wie Long sein) Zeiger auf Strings mitzugeben, die ich dann in .NET auslesen kann?
Ist zwar nicht sehr typsicher, muss in dem Fall aber sein!
Wenn ich den ReturnValue auf new IntPtr(50) setzte, dann bekomme ich das ergebnis korrekt zurück.
Allerdings muss man dann SendMessage benutzen, weil nur die Funktion auch auf das Ergebnis wartet.
Danke für eure Hilfe, die Kommunikation klappt gut!!!
Interessant!
Wie läuft das technisch?
Wie performant ist das, wenn ich z.B. Daten aus OO.org Tabellen auslesen will?
Kann ich Objektorientiert auf die Daten zugreifen?
Ist das Objektmodell sehr mächtig?
Muss ich OO.org installiert haben oder kann ich auch einfach "nur" einen Haufen DLL's ausliefern?
Grüße Christoph
Der Aufruf mit FindWindow und Postmessage klappt problemlos.
Für die Antwort, was gibt es da für Möglichkeiten.
Ich könnte den weg über Shared Memory gehen, aber:
Wie kann ich jetzt den Wert eines IntPtrs der auf long zeigt ändern?
Da steht eine 700 drin, da soll eine 50 rein, mal als Beispiel, damit ich den Wert in C++ wieder auslesen kann.
Grüße Christoph
Leider habe ich in den Threads keine richtig relevanten Informationen finden können.
Meine Frage ist: Wie kann ich einem .Net-Prozess aus C++(unmanaged) heraus eine beliebige Nachricht schicken(ich muss nur irgendwie signalisieren, dass etwas passieren soll und das muss schnell gehen, also nicht Datei wo hin schreiben oder so) und der .Net-Prozess soll mit 0 oder 1 antworten können.
Ist das nicht auf eine einfache Art möglich?
Grüße Christoph
Kennt jemand ein Code-Beispiel zu den folgenden drei Dingen???
Die Empfangsseite ist in C# geschrieben, die Senderseite in C++ oder VB6.
Folgendes: Ich habe ein Programm welches einen String prüft.
Wenn der String gut ist endet es mit returncode 0, sonst mit 1.
Das Problem: Dieses Programm wird tausende male aufgerufen(mit dem String als Kommandozeilenparameter, der Rückgabewert wird auch wieder entgegengenommen, die Methode ist auch nicht zu verändern), wobei das Starten einer .NET-Anwendung immer ein wenig lange dauert.
Da die Prüfung recht kompliziert werden kann, möchte ich gerne bei C# bleiben.
Es kommen nachher auch noch Dinge hinzu, wie Prüfungen auf Basis von Daten in einer INI-Datei.
Wie bekomme ich es hin, dass die Exe nur noch einen Bruchteil der Zeit zum Starten benötigt oder wie kann ich mir beispielsweise ein kleines VB oder C++ Programm schreiben, dass die Prüfungsmethode eines schon laufendes .NET-Programms aufruft? Dann habe ich auch die Möglichkeit, INI-Dateien nur einmal laden zu müssen und nicht bei jedem aufruf.
Danke im Vorraus für eure Antworten, ist recht wichtiges und hoch priorisiertes Thema im Moment.
Wenn ich das richtig sehe, ist das eine einmalige sache, das konvertieren von xml zu db und wenn du die daten erstmal im dataset hast, brauchst du ja praktisch nur noch passende db-tabellen erstellen und die Daten per update reinspielen.
soweit die Theorie.
Bei der Praxis hilft Forensuche und Google sehr schnell weiter hoffe ich.
Grüße Christoph
Und denk am besten nochmal darüber nach, ob es wirklich MySQL sein soll, das stößt Feature-Seitig nähmlich sehr schnell an seine Grenzen. Und auch die .NET-Integration ist nicht die beste. Du solltest da vielleicht mal über Firebird, MSDE, SQL Server 2005 Express Edition..... nachdenken.
Grüße Christoph
Meinen herzlichsten!
Und denk immer dran: Ein Ingenieur hats schwör!
Ich finde, dass man T-Shirts so selten anziehen kann, meistens ziehe ich sie nur unter.
Ich hätte lieber ein Polo-Shirt, mit einem recht kleinen mycsharp.de bestickt, Bestickung ist wesentlich besser als Druck!
Bin mir aber auch darüber im Klaren, dass so ein Hemd um die 30 Euro kostet und nicht 15-20 Euro wie ein bedrucktes T-Shirt.
Wäre sicherlich nett beide Varianten anzubieten(kenn das so aus diversen Vereinen die soetwas gemacht haben!).
Original von S.H.-Teichhof
was das Clonen von herbivore angeht beißt ihr wohl auf granit er ist ja gegen das Clonen von Objekten mit einer Identität 😉
War auch einer meiner ersten Gedanken!
Dann kriegt er halt eine neue Identität.
Paul = new herbivore.Clone();
Dann wird Paul aber die gleiche Referenz auf Freundin haben wie herbivore, das könnte Streß geben.
Schau dir doch einfach mal den Quellcode des Listviews unter Mono an!
Ich denke, dass man diesen Schritt erst wagen sollte, wenn das ganze auf ASP.NET läuft.
Wenn ihr einen guten, fundierten Artikel über die Migration schreibt(das wird Golo wohl können), dann werdet ihr damit vielleicht auch Magazine zum Abdruck bringen können, vielleicht auch wichtige IT-Newsseiten wie z.B. Heise oder Golem. Das würde sehr viel Publicity bringen.
Gibt es eigentlich noch eine andere große deutsche C-Sharp-Seite?
Wenn nicht, dann wäre es m. E. sowieso für eine Zeitschrift interessant über eine Community zu berichten wie sie myCsharp.de bietet.
In der DotNetPro war ja zumindest ein Hinweis auf die laufenden Umbauten bei mycsharp.de zu lesen.
Schau mal auf die Inner Exceptions des Fehlers.
Da ist doch bestimmt noch mehr zu finden, oder?
Wie kann ich beim ms xml parser einstellen, dass die xml datei automatish formatiert wird, wenn ich mit dom.save speichere?
Bei .NET gibt es für den XMLWriter eine Eigenschaft namens Format glaube ich, die man auf Format.Indented umstellen kann.
Gibt es soetwas auch beim ms xml parser?
Oder gibt es da eine andere Möglichkeit ein DOM-Object formatiert auf die Platte zu speichern?
Grüße Christoph
countlines += lines.length;
Console.WriteLine( countlines );
das könnte auch gehen, wenn du countlines danach nicht mehr brauchst
Console.WriteLine(countlines + lines.length);
Das ist wohl das kürzeste was geht.
Eigentlich schreibt der XMLSerializer aber die Codierung immer richtig rein!
Naja, genaugenommen macht das wohl der xmlwriter den man dazwischen klemmt.
Original von svenson
Er kann ja offenbar nichtmal den XML-Header erzeugen. Vielleicht ein Namespace-Problem. Oder was mit dem Root-Element.
Wieso kann er keinen header erzeugen, Serialisierung klappt doch, nur Deserialisierung nicht.
Oder ich habe deinen Satz falsch verstanden.
Guck dir mal den Bytestream an, ob da auch wirklich drinsteht was du erwartest und schau mal auf die InnerExceptions.
Habe leider nicht mehr zeit um mir das genauer anzuschauen.
Grüße Christoph
Original von herbivore
Auch reserviert weder ein Instanz-Konstruktor noch ein Klassen-Konstruktor Speicher, sondern initialisiert ihn nur. Ein Konstuktor sollte also eigentlich bessser Initialisier heißen. Wenn der statische Konstruktor also erst spät aufgerufen wird, heißt das also keineswegs, dass der Speicher erst zu diesem Zeitpunkt reserviert wird.
Das gilt doch aber nur für WerteTypen, die in einer Klasse sind, nicht für ReferenzTypen.
Wenn ich zum Beispiel eine statische Instanz vom Typ XMLSerializer in meiner Klasse habe, die im statischen Konstruktor erschaffen wird, wird der Speicherplatz den die Instanz braucht erst belegt, wenn ich sie erschaffe. Vorher habe ich nur den Speicherplatz belegt, den die Referenz auf die Instanz benötigt.
Bei int oder DateTime natürlich was anderes.
Grüße Christoph
Der SDK sagt:
Der statische Konstruktor für eine Klasse wird in einer bestimmten Anwendungsdomäne höchstens einmal ausgeführt. Die Ausführung eines statischen Konstruktors wird durch das erste der folgenden Ereignisse ausgelöst, die in einer Anwendungsdomäne auftreten:
Eine Instanz der Klasse wird erstellt.
Es wird auf beliebige statische Member der Klasse verwiesen.
Ist mir auch kein Stück aufgefallen.
Na klar, wie soll das gehen eine Methode einer Null-Instanz aufzurufen.
Ich glaube nur um ne progressbar zu testen ist es egal, ob Du dabei den GUI-Thread blockierst.
Wenn Du das produktiv in einem Programm einsetzen willst, dann nehm eine der drei Timer-Klassen.
Nimm doch einfach ein zweidimensionales Array von decimal, damit solltest Du in Zusammenarbeit mit zwei geschachtelten Schleifen sehr schnell sehr viel Müll hinbekommen.
Grüße Christoph
Original von .unreal
Original von Quallo
Ich glaube da gibt es den is-operator.
Also if(value is System.DateTime)du glaubst? es stimmt 😉
Ich weiß, sagte der SDK auch g
Ich glaube da gibt es den is-operator.
Also if(value is System.DateTime)
Ja, vielleicht irgendein Attribut einer Klasse/Datei oder so, dass der Compiler auf soetwas nicht achten soll.
Aber ich denke, dass Eure Tipps schon ganz gut funktionieren.
Danke, das sind natürliche zwei mögliche Workarounds. Wäre natürlich schön, wenn es da noch ein Lösung für gäbe.
Grüße, Christoph
Kennt ihr sicherlich: Ihr habt in einem Projekt die XML-Kommentare angeschaltet(höchstwahrscheinlich weil ihr sie benötigt) und erstellt jetzt typisierte DataSets in dem Projekt.
Nun bekommt ihr, je nach Größe des Datasets, hunderte bis tausende Warnungen, das Kommentare für öffentliche Events, Methoden oder Felder fehlen.
Gibt es eine Möglichkeit, das zum umgehen?
Grüße Christoph
Original von masterbell
Kann ich ein DataSet über einen OleDbAdapter direkt
in ein Excel-Sheet übertragen?
ja
Also, hier die weiteren Details:
Klasse A: Namespace "A" (Namespace dringend gebraucht zum deserialisieren, sonst Fehler)
Hat ein Feld StringInstanz vom Typ string
StringInstanz = "Test";
Klasse B: Namespace "B"(Namespace dringend gebraucht zum serialisieren
Hat ein Feld AInstanz der Klasse A.
Klasse A wird aus einer XML-Datei deserialisiert, die Instanz heißt InstanzVonA
Klasse B wird erstellt und initialisiert.
B.AInstanz = InstanzVonA;
B wird in eine XML-Instanz deserialisiert.
So sieht die Datei jetzt aus:
<B xmlns:"B">
<A>
<StringInstanz xmlns:"A">Test</StringInstanz>
</A>
<B>
So soll sie Aussehen:
<B xmlns:"B">
<A>
<StringInstanz>Test</StringInstanz>
</A>
<B>
Es soll also nicht der Namespace des Elements StringInstanz explizit ausgegeben werden.
Grüße, Christoph
(Nein, natürlich habe ich keine zwei Klassen die A und B heißen und nur ein Feld beinhalten, ist nur stark abstrahiert!)
Ja, klingt wirklich super!
Wäre schön wenn daraus eine runde Sache für den Produktiveinsatz wird.
Vielleicht wäre es nochmal schön wenn Du schreibst was genau die Bibliothek kann und macht.
Grüße Christoph
Dann geht die deserialisierung nicht mehr.
Ist eine recht komplizierte Sache, die ich da mache.
Ich werde nähere Informationen dazu schreiben wenn ich wieder arbeite.
Ist es möglich zu unterdrücken, dass bei einem Xml-Element bei der Serialisierung der Namespace als Attribut mit ausgegeben wird?
Grüße Christoph
Werde das jetzt anders gestalten. Es sscheint wirklich so, als wenn das nicht vorgesehen wäre. Und dann geht alles wieder in Richtung Gefrickel und das kann ich für ein ProduktivSystem nicht gebrauchen.
Grüße Christoph
Man sollte dann aber wenn möglich auch die Klassenbibliothek von .NET nutzen.
Zumindest bei Weiterentwicklungen.
Okay, danke!
Schade, dass es dafür nichts gibt!
Original von Quallo
Vielleicht wäre managed c++ auch eine alternative.
Die Klassen kannst du dann in c# verwenden, bzw. mit den richtigen Tools kannst du die auch in c# Klassen umwandeln(Z.B. Reflektor + Zusatz auf kompilierte Assembly anwenden und in C# ausgeben lassen.Grüße Christoph
Erst in managed c++ umwandeln(das kann ganz schön viel arbeit werden, habe ich persönlich auch noch nicht gemacht), dann kann man die Klassen in C# verwenden oder die kompilierten Klassen mittels Reflector in C# Quellcode umwandeln.
Vielleicht wäre managed c++ auch eine alternative.
Die Klassen kannst du dann in c# verwenden, bzw. mit den richtigen Tools kannst du die auch in c# Klassen umwandeln(Z.B. Reflektor + Zusatz auf kompilierte Assembly anwenden und in C# ausgeben lassen.
Grüße Christoph
Hallo alle miteinander, folgendes Problem:
Ich habe eine Stored-Procedure(Oracle), die zwei(oder mehr) Cursor als Ausgangsparameter hat.
Wenn ich den Aufruf für die Stored-Procedure fertig mache und das Command an einen DatenAdapter binde, kann ich per Datenadapterinstanz.fill(Datensetinstanz) die Daten in mein DataSet laden.
Dort habe ich jetzt zwei Tabellen, die Table und Table1 heißen.
Wenn ich nun ein typisiertes DatenSet nehme, wie bekomme ich es hin, dass die Daten in der richtigen Tabelle landen?
Ist das unmöglich oder muss ich da ein Mapping machen?
Grüße Christoph
Original von SimonKnight6600
Hm, dann müsste man halt den Einsteigerbereich vom Umsteigerbereich trennen...Gruß,
SimonKnight6600
Dafür ist es ein wiki! Das kann man ja machen!
Original von SimonKnight6600
Original von maxE
Es gibt zur Zeit 2 C# Bücher auf WikiBooks. Warum nicht beide vereinheitlichen und zusammenfassen. Das wäre IMHO produktiver.Da hast du sicher recht, aber das andere C# Buch ist eher für Umsteiger geschrieben. Die beiden Bücher verfolgen andere Ziele. Das Ziel des Wikibooks, dass ich mir beim erstellen vorgestellt habe sollte auch für Anfänger leicht zu verstehen sein.
Ich werd mir das Ganze nochmals durch den Kopf gehen lassen.Gruß,
SimonKnight6600
Ich denke, dass man das Ganze besser als zusätzliche Kapitel in dem schon vorhandenen Werk machen könnte. Es ist für soetwas wie Wikipedia fast immer schädlich etwas aufzusplitten!
Meine Meinung ist, dass man nichts neues machen, sondern das bestehende Projekt auf Wikipedia erweitern sollte. Man kann ja da auch gerne als myCsharp.de team auftreten.
Ein großes Problem solcher freien Projekte ist, dass jeder etwas anderes im Sinn hat und sich persönlich ein "Denkmal" bauen will und es deswegen zu mehr und mehr Forks kommt. Dabei wäre das gewünschte Ergebnis viel schneller erreicht, wenn man sich einigen und an einem Stran ziehen würde.
Grüße Christoph
Ich glaube DateTime hat soetwas wie eine Day Property. darauf könntest du prüfen.
Grüße Christoph