Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C# Memorystream vs TMemoryStream (https://www.delphipraxis.net/184724-memorystream-vs-tmemorystream.html)

EWeiss 18. Apr 2015 00:41

AW: Memorystream vs TMemoryStream
 
Funktioniert jetzt.

Den ganzen Kram mit dem Pinnedobject konnte ich mir sparen und ist nicht nötig.
Der einzige Nachteil habe jetzt einen unsicheren Code .. was ich eigentlich nicht wollte. (unsafe)
bedingt durch die Konvertierung vom Image zum Pointer.
Wenn jemand eine Idee hat wie ich das anders machen kann. Nur zu!
Möchte das unsafe gern wieder entfernen.

Code:
              byte[] openFile = File.ReadAllBytes(OpenFileDialog1.FileName);
              fixed (byte* p = openFile)
              {
                IntPtr image = (IntPtr)p;

                CoverArtData.Name = Marshal.StringToHGlobalAuto(Description);
                CoverArtData.CoverType = 3;
                CoverArtData.MIMEType = Marshal.StringToHGlobalAuto(MIMEType);
                CoverArtData.Description = Marshal.StringToHGlobalAuto(Description);
                CoverArtData.Width = Width;
                CoverArtData.Height = Height;
                CoverArtData.ColorDepth = ColorDepth;
                CoverArtData.NoOfColors = NoOfColors;
                CoverArtData.PictureFormat = CoverArtPictureFormat;
                CoverArtData.Data = image;
                CoverArtData.DataSize = BitmapStream.Length;

                if (TagsLib.TagsLibrary_AddCoverArt(Tags, TTagType.ttAutomatic, CoverArtData) == -1)
                {
                  MessageBox.Show("Error while adding cover art: ", OpenFileDialog1.FileName, MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);
                }
                image = IntPtr.Zero;

                BitmapStream.Close();
                btnSave_MouseDown(sender, e);
              }
gruss

OlafSt 18. Apr 2015 09:52

AW: Memorystream vs TMemoryStream
 
Das unsafe wirst du nicht wieder los, weil du schließlich Code produzierst, der unmanaged, also außerhalb der Kontrolle des .NET-RT liegt. Das wiederum liegt an der Delphi-DLL, die nun mal unmanaged ist.

EWeiss 18. Apr 2015 10:22

AW: Memorystream vs TMemoryStream
 
Zitat:

Zitat von OlafSt (Beitrag 1298295)
Das unsafe wirst du nicht wieder los, weil du schließlich Code produzierst, der unmanaged, also außerhalb der Kontrolle des .NET-RT liegt. Das wiederum liegt an der Delphi-DLL, die nun mal unmanaged ist.

In wie weit?
Wird nur verwendet wenn ich den Code mit dem flag unsafe kompiliere und unsafe explicit verwende.

Was hat das mit Delphi zu tun?
Wenn ich den code nicht mit unsicheren Pointern schreibe dürfte unsafe nicht aktiv sein.

unmanaged nicht gleich unsafe

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz