من دلفي 7 الى xe3
#1
السلام عليكم ورحمة الله تعالى وبركاته
ارغب طبعا ان اعرف كيف اعدل على سورس دلفي 7 ليعمل بدون مشاكل على دلفي xe3
ليس سورس محدد بل اي سوس بصفة عامة
الرد
#2
أهم شيئ في الاختلاف هو دعم اليونيكود 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

Open Your Source .. Open Your Mind
الرد
#3
وهل ex3 يتوجب ان يكون "فروم ورك " منصب على الجهاز او اي حزم اخرى ؟
سبحان الله و بحمده سبحان الله العظيم
الرد
#4
anew كتب :وهل ex3 يتوجب ان يكون "فروم ورك " منصب على الجهاز او اي حزم اخرى ؟

لا , لا يتطلب الفرام وورك :d
Open Your Source .. Open Your Mind
الرد
#5
شكرا اخي الغالي على ردك
مافهمته انه علي اعادة حساب حجم المتغيرات هل جميع المتغيرات ام فقط تلك المتعلقة بالنصوص ك word و char و string
وقد واجهة مشكلة اعتقد انها تخص ماذكرت في حساب حجم المتغيرات
وهذه المشكلة في دالة ReadProcessMemory
وقد اخترت هذا الاصدار لأنه سيمكنني من عمل برامج 64 بت وتحويل بعض السورسات اولا لكي اعمل عليه
الرد
#6
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
Open Your Source .. Open Your Mind
الرد
#7
شكرا اخي العزيز
لكنني لم اتمكن من معرفة المشكلة في هذه الدالة وقد استخدمت في السورس اكثر من مرة
مع انني غيرت ماذكرت لي الا ان الخطأ لم يتغير
كود :
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;
الرد
#8
يجب أن تراعي نوع المتغيرات 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; 
Open Your Source .. Open Your Mind
الرد
#9
كذلك المحرر Rave Reports قد استغنت عنه الشركة منذ DXE2 لذلك ان كانت برامجك تعتمد عليه فستظطر إلى إعادة بنائها على Fast Report أو ما شابه.
من قال حاد عن أصله أو قال مات فقد كذب
الرد
#10
شكرا اخي العزيز
تم الامر بنجاح وتم تحويل السورس ويعمل بشكل جيد
بالنسبة ل 64بت يجب القيام ببعض التعديلات ايضا حسب علمي هل لك ان تشرح لي ماذا يجب ان اغير
فقد جربت وظهرت اخطاء في بعض اكواد الاسمبلي في مكونات uallcollection
الرد


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


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