PDA

View Full Version : تغييرات تايپ‌ها در دلفي 2010



alinikaein
چهارشنبه 23 دی 1388, 19:32 عصر
سلام؛

توی دلفی 2010، برای تبدیل انواع فرمت‌ها، به مشکل‌های جالبی برخورد کردم. می‌خواستم ببینم ایراد از کجاست و راه حل چیه؟

برای دستور WinExec در دلفی 7 با شرط این که MyPath از نوع String باشه، از روش زیر استفاده می‌کردیم:

WinExec(PChar(MyPath), SW_SHOWNORMAL);


حالا توی 2010 این روش را ایراد می‌گیره که:

Incompatible types: 'Char' and 'AnsiChar'

جستجو که کردم، روش زیر را پیدا کردم برای تبدیل String به PAnsiChar.

WinExec(PAnsiChar(AnsiString(MyPath)), SW_SHOWNORMAL);

حالا می‌خوام ببینم یعنی باید دقیقاً همین کار را کرد؟ یا روش اصولی‌تر و ساده‌تری وجود داره؟
و مهم‌تر از همه این که چرا دلفی این تغییرات را ایجاد کرده؟

در مورد GetCurrentRecord(Buffer: PChar) هم که به GetCurrentRecord(Buffer: PByte) تبدیل شده، راه حل چیه؟


آیا راهنمای خاصی برای این موارد وجود داره؟ دوستانی که اطلاع دارند و کار کردن، لطف کنید و لینک بدید.

ممنون.

Felony
چهارشنبه 23 دی 1388, 20:43 عصر
WinExec(PAnsiChar(MyPath), SW_SHOWNORMAL);

alinikaein
چهارشنبه 23 دی 1388, 21:44 عصر
نچ برادر من!!!
من هم اول همين كار را كردم. ولي استفاده از PAnsiChar به تنهايي، باعث مي‌شه كه فقط يك كاراكتر به عنوان پارامتر اول ارسال بشه و در نتيجه كار نمي‌ده.


يا علي... موفق باشي...

Felony
چهارشنبه 23 دی 1388, 22:15 عصر
درسته ، من حواسم نبود .

vcldeveloper
چهارشنبه 23 دی 1388, 23:14 عصر
برای دستور WinExec
WinExec یک تابع منسوخ شده در APIهای ویندوز هست که صرفا برای حفظ Backward Compatibility در برنامه های 16-بیتی همچنان در لیست توابع API ویندوز باقی مانده. بارها توصیه کردیم که از خیر این تابع بگذرید، و به جای آن از ShellExecute یا CreateProcess استفاده کنید.

با توجه به منسوخ شدن این تابع، مایکروسافت آن را با یونیکد سازگار نکرده، برای همین هم در نسخه های جدید دلفی (نسخه های 2009 و 2010) در صورت استفاده از PChar، خطا دریافت می کنید، و باید صراحتا PAnsiChar را درج کنید.


و مهم‌تر از همه این که چرا دلفی این تغییرات را ایجاد کرده؟
برای پشتیبانی کامل از یونیکد.


آیا راهنمای خاصی برای این موارد وجود داره؟
چندین کتاب و مقاله انگلیسی در مورد مهاجرت از کدهای قدیمی ANSI به یونیکد منتشر شدند. این مسئله مربوط به دلفی 2009 میشه، و در کتاب ها و مقالات مربوط به دلفی 2009 می تونید مطالب زیادی در این رابطه پیدا کنید. مثلا کتاب Delphi 2009 Handbook چند فصل رو به این موضوع اختصاص داده.

اخیرا هم شرکت سازنده دلفی یک مقاله 38 صفحه ایی در این زمینه بصورت رایگان منتشر کرده با عنوان Delphi Unicode Migration for Mere Mortals: Stories and Advice from the Front Lines نوشته Cary Jensen.

alinikaein
پنج شنبه 24 دی 1388, 10:43 صبح
چندین کتاب و مقاله انگلیسی در مورد مهاجرت از کدهای قدیمی ANSI به یونیکد منتشر شدند. این مسئله مربوط به دلفی 2009 میشه، و در کتاب ها و مقالات مربوط به دلفی 2009 می تونید مطالب زیادی در این رابطه پیدا کنید. مثلا کتاب Delphi 2009 Handbook چند فصل رو به این موضوع اختصاص داده.

اخیرا هم شرکت سازنده دلفی یک مقاله 38 صفحه ایی در این زمینه بصورت رایگان منتشر کرده با عنوان Delphi Unicode Migration for Mere Mortals: Stories and Advice from the Front Lines نوشته Cary Jensen.

می‌شه لطف کنید و لینک بدید؟

ممنون

vcldeveloper
پنج شنبه 24 دی 1388, 17:59 عصر
http://www.embarcadero.com/resources/technical-papers
http://docwiki.embarcadero.com/RADStudio/en/Unicode_in_RAD_Studio

alinikaein
پنج شنبه 24 دی 1388, 22:59 عصر
منبع فارسي هم موجود هست در اين زمينه؟ :متفکر:

vcldeveloper
جمعه 25 دی 1388, 01:07 صبح
منبع فارسی هم موجود هست در این زمینه؟
احتمالش خیلی کم هست که غیر از یک سری نکات کلی که در همین سایت برنامه نویس بخاطر بعضی تاپیک ها گفته شده، جای دیگه بتونید مطلب فارسی با جزئیات مناسب در این زمینه پیدا کنید.

Peresident_y
دوشنبه 01 شهریور 1389, 21:52 عصر
نچ برادر من!!!
من هم اول همين كار را كردم. ولي استفاده از PAnsiChar به تنهايي، باعث مي‌شه كه فقط يك كاراكتر به عنوان پارامتر اول ارسال بشه و در نتيجه كار نمي‌ده.


يا علي... موفق باشي...

نوع داده ها عوض نشده ورودی بعضی از توابع تغییر کرده
در برخی از توابع که از PCharاستفاده میشده تغییر به PAnsiChar دیده میشه
و تابع PAnsiChar هم درست کار نمیکنه راه حل اینه:
از این روش استفاده کن 100% OK
s := PAnsiChar(AnsiString(Application.ExeName));

vcldeveloper
سه شنبه 02 شهریور 1389, 01:04 صبح
نوع داده ها عوض نشده ورودی بعضی از توابع تغییر کرده
اتفاقا نوع داده ها تغییر کردند؛ نوع های داده ایی مثل string, char, pchar در واقع Alias هستند. تا قبل از دلفی 2009، به ترتیب مترادف بودند با AnsiString, AnsiChar, PAnsiChar، و از دلفی 2009 به بعد مترادف هستند با UnicodeString. WideChar. PWideChar.


و تابع PAnsiChar هم درست کار نمیکنه
PAnsiChar تابع نیست، بلکه اونجا از Type-casting استفاده شده.