memorystream addres?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

memorystream addres?

Mesaj gönderen cozturk »

bir bileşen ,
Function StreamInput(Buffer as Variant)
veya
Function StreamInputEx(BuffAddr, Size)

demiş. şimdi benim bu fonksiyonlara atamak üzere memorystream'im var. fakat bu nasıl bir durum anlayamadım. memorystreamin adresi nedir? nasıl alınır. ?

variant olayına bakılırsa bu OLE durumu gibi fakat burada Ole bir durum yok. programın içinde memorystream duruyor. napabilirim. Helpden bişey anlaşılmıyor. hELP,
BuffAddr : data (byte array).
Size :The size of the buffer in bytes. DİYE AÇIKLAMIŞ.

ben de memorystreami bir byte arraye yükledim. adresini de pbytearray gibi bir pointera. fakt yine beceremedim. :oops:
En son cozturk tarafından 29 Ağu 2005 12:23 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam googladan arayıp bulduğum örnek bir kod

Kod: Tümünü seç

<code>
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using System.Globalization;
using System.Runtime.Serialization;

namespace MyCursor
{
[Serializable]
[TypeConverterAttribute(typeof(CursorWrapperConverter))]
public class CursorWrapper : ISerializable
{
Cursor _cursor;
byte[] _originalFile;

internal CursorWrapper(SerializationInfo info, StreamingContext context)
{
SerializationInfoEnumerator sie = info.GetEnumerator();
if (sie == null)
{
return;
}
for (; sie.MoveNext();)
{
if (String.Compare(sie.Name, "CursorData", true,
CultureInfo.InvariantCulture) == 0)
{
byte[] dat = (byte[])sie.Value;
try
{
if (dat != null)
{
_originalFile = dat;
CursorConverter cc = new CursorConverter();
_cursor = (Cursor)cc.ConvertFrom(OriginalFile);
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
}
}

public CursorWrapper(Stream stream)
{
_originalFile = new byte[stream.Length];
stream.Read(_originalFile, 0, _originalFile.Length);
CursorConverter cc = new CursorConverter();
_cursor = (Cursor) cc.ConvertFrom(_originalFile);
}

public Cursor Cursor
{
get { return _cursor; }
}

internal byte[] OriginalFile
{
get { return _originalFile; }
}

void ISerializable.GetObjectData(SerializationInfo si, StreamingContext
context)
{
si.AddValue("CursorData", OriginalFile, typeof(byte[]));
}
}

public class CursorWrapperConverter : TypeConverter {
public override bool CanConvertFrom(ITypeDescriptorContext context, Type
sourceType)
{
if (sourceType == typeof(byte[]))
{
return true;
} return base.CanConvertFrom(context, sourceType);
}

public override bool CanConvertTo(ITypeDescriptorContext context, Type
destinationType)
{
if (destinationType == typeof(byte[]))
{
return true;
} return base.CanConvertTo(context, destinationType);
}

public override object ConvertFrom(ITypeDescriptorContext context,
CultureInfo culture, object value)
{
if (value is byte[])
{
MemoryStream ms = new MemoryStream((byte[])value);
return new Cursor(ms);
} return base.ConvertFrom(context, culture, value);
}

public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(byte[]))
{
if (value != null)
{
return ((CursorWrapper)value).OriginalFile;
}
else
return new byte[0];
}

return base.ConvertTo(context, culture, value, destinationType);
}
}
}

fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

MemoryStream.Memory diyerek adresine, MemoryStream.Size diyerek büyüklüğüne ulaşabilirsin.
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

MemoryStream.Memory, bu bir pointer .

var
Pt: Pinteger;

..
Pt:=@ms.Memory;

bana gereken kısım ise pt^ oluyor. bu sayede olay çözüldü.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

MemoryStream.Memory^ yapman işe yaramadı mı ki?
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

Yaramadı, çünkü fonksiyon BuffAddr kısmını "integer" olarak istemiş. tabi ben bunu bahsetmemiştim. ancak bu şekilde olabildi.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

cozturk yazdı:Yaramadı, çünkü fonksiyon BuffAddr kısmını "integer" olarak istemiş. tabi ben bunu bahsetmemiştim. ancak bu şekilde olabildi.
Integer(MemoryStream.Memory^) olabilir o zaman. Yani bir variable'a daha atama yapmana gerek yok.
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

buna ben de inanıyorum. fakat gel gör ki olmuyor. sebebi muhtemelen bu conponenti yapan adamların kıllığı
Cevapla