Laden...
S
SimonKnight6600 myCSharp.de - Member
Schüler Österreich Dabei seit 09.03.2005 709 Beiträge
Benutzerbeschreibung

Forenbeiträge von SimonKnight6600 Ingesamt 709 Beiträge

16.07.2009 - 10:57 Uhr

So, bin mittlerweile zu dem Schluss gekommen, dass die IStream Methode mit C# nicht so ohne weiteres möglich ist. Grundsätzlich muss es aber gehen. Nochmal mein Problem: Ich möchte eine Datei per Drag and Drop in ein Explorer Fenster ziehen (geht normal ganz einfach, wenn die Quelldatei irgendwo auf der Festplatte liegt) Die Datei ist aber in einer Datenbank.

2 andere Möglichkeiten:

  1. Eine Möglichkeit wäre, dem Explorer den Pfad einer temporären Datei zu geben und beim Einfügen die Datei dorthin zu kopieren, damit sie sich der Explorer von dort holen kann. Allerdings müsste der Explorer warten bis ich mit dem Kopieren fertig bin. (Was er nicht tut, und sich deswegen beschwert dass die Datei in Verwendung ist.) Wie krieg ich den Explorer dazu, zu warten bis ich die Datei in den Temp Ordner kopiert habe?

  2. Eventuell ist es auch möglich, den Pfad des Ordners zu bekommen, in den der Benutzer die Datei gedroppt hat. Dann könnte meine Anwendung die Datei auch direkt dorthin schreiben.

15.07.2009 - 12:33 Uhr

Hallo zusammen!

Ich komme momentan nicht weiter, der Explorer stürzt immer nach einigen ComExceptions mit der Fehlermeldung "Ungültige Formattec Struktur" ab. Das Problem liegt in der Methode GetData(ref System.Runtime.InteropServices.ComTypes.FORMATETC formatetc, out System.Runtime.InteropServices.ComTypes.STGMEDIUM medium).

Ich hab das Testprojekt angehängt.

[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
void System.Runtime.InteropServices.ComTypes.IDataObject.GetData(ref System.Runtime.InteropServices.ComTypes.FORMATETC formatetc, out System.Runtime.InteropServices.ComTypes.STGMEDIUM medium)
{
    medium = new STGMEDIUM();

    Debug.WriteLine("Format requested: " + DataFormats.GetFormat(formatetc.cfFormat).Name);


    if (DataFormats.GetFormat(formatetc.cfFormat).Name == NativeMethods.ShellClipboardFormats.CFSTR_FILEDESCRIPTORW.Name)
    {
        Debug.WriteLine("---- FileDescriptor wird übergeben");
        MemoryStream fdStream = new MemoryStream();
        fdStream.Write(BitConverter.GetBytes(files.Count), 0, sizeof(UInt32));

        NativeMethods.FILEDESCRIPTORW fd = new NativeMethods.FILEDESCRIPTORW();
        fd.cFileName = files[0].FileName;
        fd.nFileSizeHigh = (UInt32)(files[0].FileSize >> 32);
        fd.nFileSizeLow = (UInt32)(files[0].FileSize & 0xFFFFFFFF);

        Int64 fileWriteTimeUtc = DateTime.Now.ToFileTimeUtc();
        fd.ftLastWriteTime = new NativeMethods.FILETIME();
        fd.ftLastWriteTime.nFileTimeHigh = (uint)(fileWriteTimeUtc >> 32);
        fd.ftLastWriteTime.nFileTimeLow = (uint)(fileWriteTimeUtc & 0xFFFFFFFF);

        // FileDescriptor in Memory Stream schreiben
        int fdSize = Marshal.SizeOf(fd);
        IntPtr fdPtr = Marshal.AllocHGlobal(fdSize);
        Marshal.StructureToPtr(fd, fdPtr, true);
        byte[] fdByteArray = new byte[fdSize];
        Marshal.Copy(fdPtr, fdByteArray, 0, fdSize);
        Marshal.FreeHGlobal(fdPtr);

        fdStream.Write(fdByteArray, 0, fdByteArray.Length);
        SetData(NativeMethods.ShellClipboardFormats.CFSTR_FILEDESCRIPTORW.Name, fdStream);
        return;
    }

    if (IsAllowedTymed(formatetc.tymed))
    {
        if ((formatetc.tymed & TYMED.TYMED_ISTREAM) != TYMED.TYMED_NULL)
        {
            medium.tymed = TYMED.TYMED_HGLOBAL | TYMED.TYMED_ISTREAM;

            if (formatetc.cfFormat == NativeMethods.ShellClipboardFormats.CFSTR_FILECONTENTS.Id)
            {
                if (istream != null)
                {
                    medium.unionmember = pointer;
                }
                else
                {
                    istream = new ComIStreamWrapper(File.Open(files[0].FullPath, FileMode.Open));
                    pointer = Marshal.GetIUnknownForObject(istream);
                    medium.unionmember = pointer;
                }
            }

            try
            {
                ((System.Runtime.InteropServices.ComTypes.IDataObject)this).GetDataHere(ref formatetc, ref medium);
                return;
            }
            catch (Exception exc)
            {
                NativeMethods.GlobalFree(new HandleRef((STGMEDIUM)medium, medium.unionmember));
                medium.unionmember = IntPtr.Zero;
                Debug.WriteLine(exc);
            }
        }
        medium.tymed = formatetc.tymed;
        ((System.Runtime.InteropServices.ComTypes.IDataObject)this).GetDataHere(ref formatetc, ref medium);
    }

}

So wie es scheint gibt es bis jetzt niemanden der das hinbekommen hat. (Zumindest findet sich per Google nichts)

Viele Grüße,
Simon

15.07.2009 - 08:05 Uhr

Hallo JAck30lena!

Danke für deine Mühe. Unter System.Runtime.InteropService.ComTypes gibt es ebenfalls ein IStream Interface, ich hab also die Qual der Wahl 😉. Aber mithilfe des Links den du gestern gepostet hast sollte ich's hinkriegen.

Viele Grüße,
Simon

14.07.2009 - 17:16 Uhr

Hallo JAck30lena!

Weil ich ehrlich gesagt keine Ahnung habe, wie ich dies mit C# realisieren könnte. Ich hatte gehofft, dass jemand damit Erfahrung hat und weiß wie man es implementiert. Gibt es eventuell eine Möglichkeit den Ordner herauszufinden, in in den gedroppt wurde?

Viele Grüße,
Simon

14.07.2009 - 16:36 Uhr

Hallo JAck30lena!

Größere Dateien werden zwar korrekt übertragen, der Windows Explorer regt sich aber auf dass nicht genügend Speicher vorhanden ist. (Ist ein bekanntes Problem des Codes, wird auch bei den Kommentaren unter dem Artikel diskutiert).

Gibt es eventuell eine andere Möglichkeit? Es würde ja auch reichen wenn ich irgendwie an den Pfad komme, in den die Datei hingedroppt wurde.

Viele Grüße,
Simon

14.07.2009 - 16:11 Uhr

Hallo zusammen!

Wir möchten in unsere Anwendung Drag and Drop Funktionalitäten einbauen, so dass z.B. eine Datei von unserer Anwendung aus in den Explorer gezogen werden kann und dann dorthin kopiert wird

Das schwierige dabei: Die Datei liegt in einer Datenbank. Es gibt auf Codeproject einen Artikel dazu, leider hat dieser Probleme mit größeren Dateien. (ab 20Mb) In der MSDN gibt es auch eine Beschreibung der notwendigen Datenstrukturen, die hat mir aber auch nicht weitergeholfen. Der Inhalt der Datei müsste über ein IStream Interface direkt an den Explorer gestreamt werden...

Viele Grüße,
Simon

10.11.2008 - 08:21 Uhr

Hallo teelleet!

Cross-Postings sind hier nicht erlaubt (http://www.tutorials.de/forum/net-cafe/327915-kompilierung-zur-laufzeit.html) ==> geschlossen

Ausnahmsweise: In deinem Fall ist es eventuell einfacher, den Compiler direkt aufzurufen. (CSC.exe im Verzeichnis C:\WINDOWS\Microsoft .NET\Framework\2.0.x)

Viele Grüße,
Simon

05.11.2008 - 17:15 Uhr

Oder das HTML Agility Pack.

Viele Grüße,
Simon

14.08.2008 - 12:31 Uhr

Hallo frisch!

Dann würde also der Mensch "Michael19Braun" heißen

Das erspart weitere Fragen ^^.

Viele Grüße,
Simon

14.08.2008 - 12:17 Uhr

Folgendes würde auch noch gehen:

Beispiel (basierend auf michlGs Sourcecode)


//Diese Methode muss in die Klasse deines Forms
public void FillComboBox()
{
     Mensch m = new Mensch();
     m.Name= "Michael";
     m.Alter = 19;
     m.Haarfarbe = "Braun";

     comboBox.Items.Add(m);
}

public class Mensch
{
    public string Name;
    public int Alter;
    public string Haarfarbe;

    public override string ToString()
    {
        // Abändern so wie du es brauchst
        return Name + Alter.ToString() + Haarfarbe;
    }
}

So, jetzt hast die Qual der Wahl.

Viele Grüße,
Simon

13.08.2008 - 10:06 Uhr

Bei mir hat sich die Installationszeit auch in Grenzen gehalten, vor allem wenn man bedenkt wie viel sich für ein Service Pack geändert hat...

Hier noch eine genauere Auflistung der Änderungen mit Screenshots: http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx

Viele Grüße,
Simon

08.08.2008 - 14:58 Uhr

Hallo norman_timo!

Wir werden uns mal mit dem Hersteller von der Komponente in Verbindung setzen, ob es nicht eine andere Lösung gibt. (So dass wir das gewünschte ohne die Methode erreichen oder der Hersteller die Klasse ändert)

Vielen Dank,
Simon

08.08.2008 - 10:17 Uhr

Hallo tscherno!

Danke für deine Tipps. Auf diesem Weg konnte ich die Methode aufrufen, allerdings scheint das nicht bei bereits erstellten Typen (die nicht dynamisch angelegt werden) zu funktionieren:

Type t = typeof(TestClass);

MethodInfo methodToSwap = t.GetMethod("PrivateMethod", BindingFlags.NonPublic | BindingFlags.Instance);
MemberInfo mb = (MemberInfo)methodToSwap;
PropertyInfo[] infos = methodToSwap.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance );

int token = mb.MetadataToken;

// So bin ich nicht an die Property rangekommen, darum hab ichs mit dem MemberInfo Cast oben probiert. Daran liegts aber nicht!
// int token = Convert.ToInt32(mb.GetProperty("MetadataToken", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(mb, null));

byte[] ilCode = this.GetType().GetMethod("NewMethod", BindingFlags.NonPublic | BindingFlags.Instance).GetMethodBody().GetILAsByteArray();

GCHandle handle = GCHandle.Alloc(ilCode, GCHandleType.Pinned);
IntPtr pointer = handle.AddrOfPinnedObject();

MethodRental.SwapMethodBody(t, token, pointer, ilCode.Length, 0);

handle.Free();

t.GetMethod("PrivateMethod", BindingFlags.NonPublic | BindingFlags.Instance).Invoke( null, new object[]{});

Die MethodRental.SwapMethodBody-Methode kann nur aufgerufen werden, um den Methodentext in einem dynamischen Modul auszulagern.

Hallo norman_timo!

Die Assembly ist wie gesagt eine Drittkomponente und Änderungen daran sind nicht erlaubt.

Viele Grüße,
Simon

07.08.2008 - 17:07 Uhr

Hallo talla!

Es muss leider ungebedingt zur Laufzeit sein.

Viele Grüße,
Simon

07.08.2008 - 17:03 Uhr

Hallo DaMoe80!

Die Komponente ist nicht von uns.

Für mich hört sich Deine Idee ein wenig gefährlich an, da schnell den Überblick verlieren kann, wo eine Methode ausgetauscht wurde

Soweit ich weiß ist das die einzige Möglichkeit. Und es ist nur eine Methode, da dürfte das kein Problem sein.

die Ihr verwendet nicht einfach dekorieren (Decorator Pattern

Nein, das ist leider nicht möglich 😦. Wir müssen die private Methode austauschen.

Viele Grüße,
Simon

07.08.2008 - 16:31 Uhr

Hallo zusammen!

Wir verwenden hier in einer Firma eine Komponente, die wir an einer bestimmten Stelle erweitern wollen. Allerdings ist diese Komponente dazu keine Möglichkeit. Wir müssen aber eigentlich nur eine Methode austauschen...

Ich habe System.Reflection.Emit.MethodRental.SwapMethodBody gefunden, allerdings ist die Methode recht schlecht dokumentiert und sie funktioniert auch nur wenn man eine Klasse dynamisch zusammenbaut.

Gibt es irgendeine andere Möglichkeit, einen Methodenkörper zur Laufzeit durch einen anderen auszutauschen?

Viele Grüße,
Simon

29.07.2008 - 09:00 Uhr

Hallo Dexter!

Nein, das ist nicht ohne ein wenig Zusatzarbeit möglich: http://www.matusz.ch/blog/2007/03/05/autostart-eintrag-einer-clickonce-applikation/

Siehe auch hier: http://msdn.microsoft.com/de-de/library/142dbbz4.aspx (Abschnitt "Vergleich zwischen ClickOnce und Windows Installer")

Viele Grüße,
Simon

15.05.2008 - 16:24 Uhr

Hallo Scarecraft!

Ich hab ein Bild angehängt. Ist ist ein Gadget für die Vista Sidebar, also kein Programm im eigentlichen Sinn.

Viele Grüße,
Simon

30.04.2008 - 11:42 Uhr

Hallo hakbak!

Ich habe den Code nicht genau durchgesehen oder getestet, aber beim File Handling empfehlt es sich, using {...} zu verwenden:


using (FileStream fs = new FileStream)
{
    // mit fs arbeiten
}

Bau das mal in deinen Code ein.

Viele Grüße,
Simon

25.04.2008 - 20:26 Uhr

Hallo Arwen!

Ich denke wie man ein Projekt angeht hängt auf jeden Fall von der Größe und von der Anzahl der Beteiligten ab. Ich nehme mir zwar auch oft vor ein Projekt vorher durchzuplanen aber meistens hacke ich dann trotzdem gleich drauf los 😉. Für kleinere private Projekte geht das meiner Meinung nach auch in Ordnung, da sich dort manche Ideen oft erst während dem Programmieren ergeben und einem dann die beste Planung nichts mehr nützt 😉.

Das Theme wurde aber schon einige Male besprochen...

Viele Grüße,
Simon

18.03.2008 - 22:41 Uhr

Hallo s-sharp,

so viele AddIns gibt es für SharpDevelop leider nicht. Die Liste im Wiki ist wahrscheinlich ziemlich vollständig.

vg,
Simon

04.03.2008 - 15:12 Uhr

Hallo Captain-Party

Vielleicht hilft dir die NRefactory Bibliothek von SharpDevelop. (http://icsharpcode.com/OpenSource/SD/Download/)

vg,
Simon

04.03.2008 - 15:03 Uhr

Hallo shambl3r!

Ja, siehe http://www.eggheadcafe.com/articles/stripimagefromanimatedgif.asp 😉

//Nachtrag: Man braucht zusätzlich noch eine Sourcecode Datei von hier: MS Download Center. (Stammt aus diesem Artikel: http://msdn2.microsoft.com/en-us/library/aa479306.aspx)

vg,
Simon

16.01.2008 - 18:37 Uhr

Hallo John1212!

Ich denke dass man dafür z.B. ffmpeg verwenden kann. Über Google solltest du dazu schnell das richtige finden.

vg,
Simon

14.01.2008 - 15:17 Uhr

Hallo stef!

Mhm, warum zeichnest du nicht gleich das Panel? 😉

vg,
Simon

14.01.2008 - 15:14 Uhr

Hallo Schimki86!

Ist eine aktuelle DirectX Version installiert? Und bist du sicher dass das Problem an XNA liegt? Bau mal ganz zu Beginn der Anwendung einen try-catch Block ein und lass dir die Fehlermeldung per MessageBox.Show ausgeben.

vg,
Simon

13.01.2008 - 17:30 Uhr

Hallo memphis0815!

Wie wärs mit Membership.CreateUser()? 😉

vg,
Simon

13.01.2008 - 17:27 Uhr

Hallo budi1602!

Nutzt du Windows Vista? Damit verträgt sich VS 2005 nicht sonderlich gut. Ich empfehle dir C# Express 2008 (bisher nur auf Englisch verfügbar) auszuprobieren. Dort lässt sich auch .NET 2.0 weiterverwenden, wenn du das möchtest. (http://www.microsoft.com/express/download/)

vg,
Simon

11.12.2007 - 18:15 Uhr

Hallo flobow!

Das Problem hatte ich auch vor kurzem. Bei mir funktionierte es besser mit AssemblyName.GetNameAssemblyName(), da ich bei den normalen Reflection Methoden (trotz ReflectionOnlyLoad soweit ich weiß) die Datei danach nicht überschreiben konnte.

vg,
Simon

10.12.2007 - 14:53 Uhr

Hallo DerProgrammierer78!

Coole Idee 😉. Allerdings sollten die Fragen eventuell in Schwierigkeitsstufen eingeordnet sein damit die Testergebnisse vergleichbar sind.

Ich werd mir auch ein paar teuflisch schwere Fragen ausdenken.

vg,
Simon

05.12.2007 - 21:00 Uhr

Hallo naseweis!

Naja, erstmal die ganzen neuen Funktionen des .NET Frameworks 3.5. Außerdem gibt es viele Verbesserungen an der Entwicklungsumgebung selbst (integrierter WPF Designer, bessere Vista Kompatiblität, etc.). Deine alten Projekte und auch das Framework 2.0 kannst du weiter verwenden.

Also ich wüsste nicht was dagegen sprechen sollte 😉.

vg,
Simon

11.11.2007 - 11:11 Uhr

Hallo t_fero!

Wir können dir nicht deine Hausaufgaben machen, helfen dir aber gerne bei konkreten Problemen. Wie viel Erfahrung hast du mit C#? Eventuell solltest du dir das C# Openbook durchlesen. Zum Thema Dateien: [Tutorial] Alles über Dateien 2.2 . Und das wichtigste überhaupt: Suche (Mit deren Hilfe du alles nötige findest, was du brauchst.)

vg,
Simon

04.11.2007 - 21:10 Uhr

Hallo v.wochnik!

Diese CreativeCommons Lizenz kommt deinen Vorstellungen auch recht nahe: http://creativecommons.org/licenses/by-nc-nd/2.0/de/

Hier gibt es einen Assistenten, mit dem man die Bedingungn verändern kann: http://creativecommons.org/license/

vg,
Simon

03.11.2007 - 17:12 Uhr

Hallo xloom!

SharpDevelop hat einen eingebauten WiX Editor. Probier mal das Projekt mit SharpDevelop zu öffnen. (Lade dir aber vorher die aktuellste Version herunter). Laut Auszug **IST **es ein SharpDevelop Projekt!

vg,
Simon

03.11.2007 - 14:31 Uhr

Hallo xloom!

.wixproj ist meiner Meinung nach eine Projektdatei für WiX (Windows Installer XML, Open Source Installer Werkzeug von Microsoft) die mit der Visual Studio 2005 Erweiterung Votive produziert wurde und damit auch wieder geöffnet werden kann. Wenn VS die Datei nicht öffnen kann sollte sie defekt sein...

Hast du wirklich das hier installiert: http://wix.sourceforge.net/votive.html

vg,
Simon

28.10.2007 - 11:39 Uhr

Hallo AbuKhattab!

Bei mir funktioniert es. Wie fügst du den Hyperlink dann der Seite hinzu?

vg,
Simon

28.10.2007 - 10:13 Uhr

Hallo mirzahat!

Eventuell hilft dir das hier weiter: http://www.adobe.com/devnet/flash/articles/stock_history03.html

vg,
Simon

28.10.2007 - 10:11 Uhr

Hallo MrRogers!

Erstmal willkommen im Forum. Du solltest zuerst die Frage von LastGentleman beantworten. Dass sich bei Google nichts finden lässt, kann ich nicht bestätigen. Z.B. http://www.codeproject.com/smartclient/SmartcardFmwk.asp

vg,
Simon

28.10.2007 - 10:01 Uhr

Hallo mirzahat!

Ich habe das Flash-Objekt noch nie verwendet, aber eine genauere Beschreibung (z.B. eine Fehlermeldung) wäre gut.

vg,
Simon

28.10.2007 - 09:58 Uhr

Hallo AbuKhattab!

Erstmal herzlich Willkommen im Forum 😉. Ich denke, dass ein ImageButton nicht für solche Fälle geeignet bzw. die beste Lösung ist. Ich würde das ganz einfach mit

Response.Write("<a href=\"http://www.google.at\"><img src=\"test.gif\" /></a>");

machen.

Falls der Link ein E-Mail sein soll, musst du statt http: mailto: verwenden. Siehe http://www.webmaster-resource.de/tricks/html/mailto-befehle.php

vg,
Simon

PS: Verschoben nach Web-Technologien

26.10.2007 - 10:11 Uhr

Hallo BastiFantasti!

Erstmal herzlich willkommen im Forum. Sehe ich richtig, dass dein Problem das Öffnen eines andern Formulars ist?
Es sieht es aus, als ob dir da noch ein paar wichtige Grundlagen fehlen. Du solltest dir also vielleicht nochmal durchlesen: Modale Dialog Fenster. Und außerdem wirst du höchstwahrscheinlich auch auf dieses Problem stossen: [FAQ] Kommunikation von 2 Forms

edit: Thema verschoben nach GUI: Windows Forms

vg,
Simon

11.10.2007 - 21:46 Uhr

Hallo zusammen!

Original von progger
Bei mir funktionierts (17", 1280x1024).

Kann ich bestätigen. Funzt bei mir auch. (Linie ziemlich exakt 10cm lang)

vg,
Simon

26.09.2007 - 20:10 Uhr

Hallo zusammen!

Ich habe jetzt die PDF Version in eine BB-Code Version übertragen. Ich hatte dabei einige kleine Probleme. Falls irgendwelche Sätze abgeschnitten sind oder sich sonstige Fehler eingeschlichen haben, bitte diese hier posten 🙂.

vg,
Simon

29.08.2007 - 16:52 Uhr

Hallo MrSparkle!

Ohne es getestet zu haben: Ich denke, er hat ein UserControl mit einer RichTextBox und fertigen Buttons für die Formatierung gemacht. Berichtigt mich bitte, falls ich falsch liege.

vg,
Simon

29.08.2007 - 09:56 Uhr

Hallo Thorsten1983!

Ich hatte so meine Probleme mit dem Installieren von DasBlog (allerdings auf einem anderen Webhoster) sodass ich schließlich auf SubText gestossen bin. Ich bin damit eigentlich total zufrieden.

vg,
Simon

28.08.2007 - 19:07 Uhr

Hallo Bocksic!

Bitte schön:


XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(@"C:\testXML.xml");
string innerXML = xmlDoc.InnerXml;

StringBuilder builder = new StringBuilder();

StringWriter writer = new StringWriter(builder);

// Entscheidend, denn beim Speichern wird der XML Code formatiert!
xmlDoc.Save(writer);

// Hier eventuell noch weitere wichtige Zeichen ersetzen
builder.Replace("<", "&lt;");
builder.Replace(">", "&gt;");

string result = builder.ToString();

_result _kannst du ins IHtmlDocument einfügen. Vergiss dabei aber nicht ein <pre> einzusetzen oder mit result.Split(Environment.NewLine); den Code aufzusplitten und an jede Zeile ein <br /> ranzuhängen.

vg,
Simon

28.08.2007 - 09:28 Uhr

Hallo Zentauro!

Paint .NET Geschickt: Ja. Klein: Nein 😉.

vg,
Simon

27.08.2007 - 13:57 Uhr

Hallo dreg_buny!

Erstmal wäre es besser, wenn du konkrete Codeaussschnitte und/oder Fehlermeldungen postest. Unter "geht nicht" kann man sich viel vorstellen 😉.

Zu deinem Problem: Wie wärs wenn du mal in der Doku von System.Reflection.Emit stöberst?

vg,
Simon