tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
274
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Hallo zusammen!

    Nach stundenlangem Versuchen bin ich mittlerweile sowohl enttäuscht als auch genervt von .NET. Alles was ich versuche ist eine möglichst dynamische Funktion zu erstellen die es ermöglicht aus einem Speicherstrom ein Objekt zu erstellen.

    In C++ würde ich das folgendermassen machen:
    Code :
    1
    2
    3
    4
    5
    
    template<typename T>
    void Read(T& value)
    {
          memcpy(&value, m_pBuffer, sizeof(T));
    }

    In C++/CLI sitze ich nun verzweifelt vor der Umsetzung dessen. Ich hatte schon dutzende Versuche gestartet, alle bisher ohne Erfolg. Bisher sieht das ganze so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
            generic<typename T>
            void Read(T% in)
            {
                Type^ t = T::typeid;
                if(t->Equals(System::String::typeid))
                {
                    in = (T)System::Text::Encoding::ASCII->GetString(m_content, m_readPoint, m_content->Length - m_readPoint);
                    m_readPoint += ((String^)in)->Length + 1;
                }
                else
                {
                }
            }

    Wie kriege ich das nun für alle anderen Typen hin? Der soll einfach sizeof(T) Bytes aus meinem MemoryStream (m_reader) lesen und das übergebene Element damit "befüllen". Ist so etwas wirklich nicht machbar? Wenn ja, dann werde ich wohl wohl oder übel .NET wieder den Rücken kehren müssen, das wäre doch einge mehr als gigantischer Flop.

    Gruss
    Cromon
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    hab kein VS hier
    aber es müsste doch die Methode ReadByte / ReadBytes im MemoryStream geben.
    Ansonsten ev. weiter an BinaryReader den Stream geben (sollte aber nicht nötig sein).
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    Ich kenn dieses Problem nur aus der Serialisierungs-Thematik: http://www.codeproject.com/KB/cs/objserial.aspx
    Die Klasse BinaryFormatter(http://msdn.microsoft.com/de-de/libr...er(VS.80).aspx) übernimmt üblicherweise deine gewünschte Aufgabe aus einem binären Strom ein Objekt zu erzeugen.
     

  4. #4
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Hallo zusammen!

    Das Thema habe ich jetzt ganz vergessen. Ich habe das jetzt durch Reflection soweit zu meiner Zufriedenheit hergestellt. Es ist zwar nicht ganz gleich wie in C++, aber vertretbar.

    Ich verwende einen BitConverter und über Reflection hole ich mir die Properties des Typs. Dadurch kann ich das dann soweit ganz sauber serialisieren.

    Den BinaryFormatter habe ich auch schon verwendet, aber entweder ich hab den nicht richtig angewandt oder er macht nicht das, was ich erwarte

    Gruss
    Cromon
     

Ähnliche Themen

  1. Geschlossenen MemoryStream wieder öffnen
    Von Danielku15 im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 20.07.09, 08:31
  2. Convertierung eines Strings in MemoryStream
    Von DK1FiWa im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 29.05.09, 12:08
  3. Vom memoryStream zur Ausführung ohne Umweg als File
    Von milvus im Forum .NET Datenverwaltung
    Antworten: 5
    Letzter Beitrag: 30.11.06, 11:22
  4. Problem mit MemoryStream
    Von JK_net im Forum .NET Archiv
    Antworten: 5
    Letzter Beitrag: 01.08.05, 14:08
  5. [C#] MemoryStream in Bitmap
    Von havalan im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 30.09.02, 14:57