Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
cozturk
Üye
Mesajlar: 484 Kayıt: 15 Haz 2005 05:22
Mesaj
gönderen cozturk » 29 Ağu 2005 12:12
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.
En son
cozturk tarafından 29 Ağu 2005 12:23 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
selman
Üye
Mesajlar: 664 Kayıt: 04 Ara 2003 12:06
Konum: İzmir
Mesaj
gönderen selman » 29 Ağu 2005 12:16
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 » 29 Ağu 2005 12:33
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 » 29 Ağu 2005 02:58
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 » 29 Ağu 2005 03:05
MemoryStream.Memory^ yapman işe yaramadı mı ki?
cozturk
Üye
Mesajlar: 484 Kayıt: 15 Haz 2005 05:22
Mesaj
gönderen cozturk » 29 Ağu 2005 04:18
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 » 29 Ağu 2005 04:31
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 » 29 Ağu 2005 04:50
buna ben de inanıyorum. fakat gel gör ki olmuyor. sebebi muhtemelen bu conponenti yapan adamların kıllığı