Avatar billede clinton-2 Nybegynder
18. maj 2007 - 09:03 Der er 3 kommentarer og
1 løsning

Problemer med konvertering af struct til byte[]

Har følgende 2 structs som hverindeholder endnu en struct mainFrame.

    public struct s1
    {
        public mainframe main;
        public int telegramNr; 
    }
    public struct s2
    {
        public mainframe main;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
        public char[] strFileName;
    }

For at konvertere struct s1 til byte[] virker følgende kode.

s1 datastruct = new s1();
..bla bla bla
byte[] arr = new byte[Marshal.SizeOf(datastruct)];
fixed (byte* parr = arr)
{ *((s1*)parr) = (s1)datastruct; }

Men det fungere ikke ved s2, hvor jeg får følgende fejl.
Cannot take the address of, get the size of, or declare a pointer to a managed type.

Det må da kunne lade sig gøre.
Avatar billede kalp Novice
18. maj 2007 - 09:34 #1
se om ikke du kan gøre det ved hjælp af denne klasse
http://msdn2.microsoft.com/en-us/library/system.bitconverter.aspx

men jeg ved det ikke.
Avatar billede clinton-2 Nybegynder
18. maj 2007 - 09:41 #2
Den vil desværre kun æde kendte typer og ikke mine structs:(
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 15:59 #3
Avatar billede clinton-2 Nybegynder
29. maj 2007 - 10:13 #4
Fik det ordnet med følgend ekode->

private unsafe byte[] StructToBytes(object datastruct)
{
  byte[] arr = new byte[Marshal.SizeOf(datastruct)];
  int rawsize = Marshal.SizeOf(datastruct);
  IntPtr buffer = Marshal.AllocHGlobal(rawsize);
  Marshal.StructureToPtr(datastruct, buffer, false);
  Marshal.Copy(buffer, arr, 0, rawsize);
  Marshal.FreeHGlobal(buffer);
  return arr;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester