delphi4arab منتديات دلفي للعرب

نسخة كاملة : من دلفي 7 الى xe3
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله تعالى وبركاته
ارغب طبعا ان اعرف كيف اعدل على سورس دلفي 7 ليعمل بدون مشاكل على دلفي xe3
ليس سورس محدد بل اي سوس بصفة عامة
أهم شيئ في الاختلاف هو دعم اليونيكود Unicode
في أغلب الأحيان لن تضطر لتغيير أي شيئ بالكود .
في حالات خاصة ستحتاج الى اجراء بعض التعديلات على الكود
عند الانتقال الى نسخ دلفي التي تدعم ال Unicode..يجب مراعاة حجم ال Data
مثلا :
D7 : SizeOf char = 1 byte
DXE3 : SizeOf char = 1 WORD
ستحتاج الى اعادة حساب الحجم المناسب للمتغيرات المحجوزة للدوال FillChar,GetMem,..
كود :
D7: FillChar(X,Size) DUnicode: FillChar(X,Size*2)
ان واجهت مشاكل .. قم باستبدال النوع Char ب AnsiChar
ان استخدمت دوال ApiFunctionA : Ansi .. يتوجب عليك أن تقوم باستبدال :
D7: Char --> DUnicode AnsiChar
D7: PChar --> DUnicode PAnsiChar

وهل ex3 يتوجب ان يكون "فروم ورك " منصب على الجهاز او اي حزم اخرى ؟
anew كتب :وهل ex3 يتوجب ان يكون "فروم ورك " منصب على الجهاز او اي حزم اخرى ؟

لا , لا يتطلب الفرام وورك :d
شكرا اخي الغالي على ردك
مافهمته انه علي اعادة حساب حجم المتغيرات هل جميع المتغيرات ام فقط تلك المتعلقة بالنصوص ك word و char و string
وقد واجهة مشكلة اعتقد انها تخص ماذكرت في حساب حجم المتغيرات
وهذه المشكلة في دالة ReadProcessMemory
وقد اخترت هذا الاصدار لأنه سيمكنني من عمل برامج 64 بت وتحويل بعض السورسات اولا لكي اعمل عليه
oubaymahjor كتب :هل جميع المتغيرات ام فقط تلك المتعلقة بالنصوص ك word و char و string
وهذه المشكلة في دالة ReadProcessMemory
النوع WORD نوع قياسي .. لا يتغير أبدا WORD=2 Bytes .
النوع string حقيقتا هو عبارة عن مؤشر لسلسلة نصية في الذاكرة حجمه = DWORD
بالنسبة للدالة ReadProcessMemory :
ممكن سبب الخطأ يكون :
كود :
D7: function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: [color=red]DWORD[/color]; var lpNumberOfBytesRead: [color=red]DWORD[/color]): BOOL; stdcall; DXE3: function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: [color=red]SIZE_T[/color]; var lpNumberOfBytesRead: [color=Red]SIZE_T[/color]): BOOL; stdcall;
أو السبب ممكن يكون في lpBuffer
شكرا اخي العزيز
لكنني لم اتمكن من معرفة المشكلة في هذه الدالة وقد استخدمت في السورس اكثر من مرة
مع انني غيرت ماذكرت لي الا ان الخطأ لم يتغير
كود :
E2033 Types of actual and formal var parameters must be identical
كود :
var Process: dword; BytesRead: dword; Usr: dword; Len: word; begin ReadProcessMemory(Process, pointer(Usr + $38), @Len, 2, BytesRead); end;
يجب أن تراعي نوع المتغيرات SIZE_T & DWORD

PHP كود :
var
  
Process: THandle;
  
BytesRead: SIZE_T;
  
Usr: DWORD;
  
Len: DWORD;
begin
  Len 
:= 0; // this is very important !!
  
ReadProcessMemory(GetCurrentProcess, Pointer(Usr + $38), @Len, 2, BytesRead);

end; 
كذلك المحرر Rave Reports قد استغنت عنه الشركة منذ DXE2 لذلك ان كانت برامجك تعتمد عليه فستظطر إلى إعادة بنائها على Fast Report أو ما شابه.
شكرا اخي العزيز
تم الامر بنجاح وتم تحويل السورس ويعمل بشكل جيد
بالنسبة ل 64بت يجب القيام ببعض التعديلات ايضا حسب علمي هل لك ان تشرح لي ماذا يجب ان اغير
فقد جربت وظهرت اخطاء في بعض اكواد الاسمبلي في مكونات uallcollection
الصفحات : 1 2