كيف نعرف عنوان Object ما في في الذاكرة؟
#11

يعني حتى الأن لم تفهم -> المؤشر يؤشر على شيئ ما
لا توجد دالة تظهر ما يؤشر عليه المؤشر إلا حسب نوع الشيئ المؤشر اليه
المثال السابق كانت TDate اظهرناها بتحويلها الى نص
غير ذلك يجب معرفة النوع أو ماهي الObject والا لن تكون سوى Bytes لا معنى لها
الرد
#12
كان عليك ان تذكر من الاول ان TDate هو صنف من نوع TObject انت كتبته و ليس المعرف مسبقا فى الدالفى و الذى هو عبارة عن Double ... .

إقتباس :لكن ماهي الدالة التي ترجع لي قيمة المؤشر وليس عنوانه ؟

1 - كيف عرفت ان الدالة ارجعت عنوان المؤشر و ليس قيمته
2 - ماذا تقصد بقيمة المؤشر (ما نوع هذه البيانات .. حجمها مثلا ... )

-------------------------------------------------------------------

الدالة التى اعطاك ايها kachwahed تعطيك عنوان قيمة المتغير الذى هو متغير من نوع TDate .. Double
و ليس TObject ... , اما اذا كان المتغير من نوع TObject فهنا الدالة ستعطيك العنوان الذى يوجد فيه عنوان TObject و ليس عنوان المكان الذى يبداء فيه TObject فى الذاكرة .

لان حجم Tobject
4 بايت فقط ... ماذا تتوقع ان يخزن فى هذا المكان من غير عنوان ... لان حجمه اكبر من هذا بكثير فهو يحتوى على اجراءت و دوال و حقول خصائص الى غير ذالك ... .

اى ان الدالة الى اعطاك ايها الاخ kachwahed صالحة مع المتغيرات التى لا تحمل قيمة اكبر من 4 بايت فقط .
لمعرفت عنوان متغير من نوع Tobject ... يجب قرائة القيمة الموجودة فى عنوانه بحيث هذه الاخيرة هى مكان Tobject فى الذاكرة
... للتاكد من ذالك استعمل Watch List + Debug Inspector

PHP كود :
var
  
Obj1 : TObject;
begin
  Obj1 
:= TObject.Create;
  
ShowMessage('Obj1 Address = $' + IntToHex(PDWORD(@Obj1)^, 8));
end; 

الى حد الان نحن نستخرج العنوان فقط و ليس القيمة التى تتكلم عنها
الرد
#13
ههههههههه راني ميت بضحك
إقتباس :حتى الأن لم تفهم -> المؤشر يؤشر على شيئ ما
لا توجد دالة تظهر ما يؤشر عليه المؤشر إلا حسب نوع الشيئ المؤشر اليه
اسمحلي اسمحلي اخي عبد العزيز(من إجابتك قاعد نتخيل فيك ونت تجاوب) قلقتك ياسر ربي يبارك فيك وينورك .

اليست الامور هكذا في الذاكرة :
[صورة: attachment.php?attachmentid=3253&stc=1&d=1329312031]
حيت الصورة جائت بعد هاته العمليات :
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
    
B : Byte;
    
I : Integer;
  
Obj1: TMyObject;
  
Obj2: TMyObject;
begin
   B
:=20;
   
I:=100;
   Try
     
Obj2 := TMyObject.Create;
     
//....................
   
Finally
     
FreeAndNil(Obj2);
   
End;
End; 
ماهي الدالة التي تاتيني بـ F0FF ؟؟؟
مثلا لو اضفت السطر التالي :
PHP كود :
Obj1:=Obj2; 
Obj1 يصبح يشير الى مايشير اليه Obj2 اي F0FF وليس Nil ؟ اليس كذالك ؟
ام توجد هناك امور اخرى حول ثمتيل objects في الداكرة و التعامل معها ؟


الملفات المرفقة
.jpg   ObjectInMemory.jpg (الحجم : 39.62 ك ب / التحميلات : 35)
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#14
الobjects عبارة عن كتلة (ان صح التعبير) من الbytes بالذاكرة
اظهار العنوان كما اوضح هاني بالمشاركة السابقة كما يمكن تكتبه
PHP كود :
var 
  
Obj1 : TObject; 
begin 
  Obj1 
:= TObject.Create;
  
ShowMessage('Obj1 Address = $' + IntToHex(Integer(Pointer(Obj1)),8));
  
FreeAndNil(Obj1);
end; 
الرد
#15
الحمد الله وشكر الله
بارك الله فيكم ربي يسعدكم ويفرحكم .
هاته الدالة التي كنت ابحت عنها بفارغ الصبر :
PHP كود :
IntToHex(Integer(Pointer(Obj1)),8)
Or
IntToHex(PDWORD(@Obj1)^, 8); 
في المرفق المثال الذي كنت اعمل عليه .

بالتوفيق للجميع ,,


الملفات المرفقة
.rar   01.Test.rar (الحجم : 14.41 ك ب / التحميلات : 15)
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#16
إقتباس :هههههه دسم إطلعة عليه قبل ان اطرح السؤال .
يبدو أن الدرس خربش علينا المفاهيم Sad
إقتباس :لكن ماهي الدالة التي ترجع لي قيمة المؤشر وليس عنوانه ؟
أعتقد أن المسألة اتضحت: قيمة المؤشر = عنوان الغرض الذي يؤشر عليه
الآن: عنوان المؤشر (أو مؤشر المؤشر) هذا شيء آخر، له استخدامات متقدمة ربما يأتي الحديث عنها لاحقا...
عند تريد التعامل مع نمط بيانات خاص بك، جهز له نمط مؤشر عليه، في مثالك TDate
PHP كود :
pDate: ^TDate;
begin
pDate 
:= @Date1;
    
Edit1.Text:=IntToHex(Integer(pDate^), 8); 
في هذا المثال القولبة بـ Integer أو DWORD أو Cardinal كلها صحيحة
آمل ألا أكون قد خربشتها أكثر Smile
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#17
إقتباس :أعتقد أن المسألة اتضحت: قيمة المؤشر = عنوان الغرض الذي يؤشر عليه
اين كنت يابطل عبارة شافية كافية نعم صحيح هذا ماكنت اقصده .
إقتباس :آمل ألا أكون قد خربشتها أكثر
لا يا اخي الخربشات تزيد من الفهم او الرجوع الى الاصل .

بارك الله فيكم وجزاكم خيرا .
في امان الله ,,
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم