ورود

View Full Version : c++ builder xe3 با win32 و mfc و c++ builder 6 چه فرق هائی داره؟



intel_amd
یک شنبه 01 بهمن 1391, 00:29 صبح
سلام دوستان این c++ builder 6 با c++ builder xe3 کد نویسیش یکیه؟ یا C++ builder xe3 چیزائی بیشتر از C++ builder 6 داره؟ چه چیزائی؟ داکیومنت کامل از xe3 کجاست؟ هرچی هلپه ماله C++ builder 6 قدیمیه !

کلا c++ builder یه سری کلاس و تابس که برا راحتیه کار ساخته شده دیگه؟ مثلا دستورای خود ویژوال سی پلاس پلاس 6 تو قسمت C++ win32 که از یک نحو خاص و نسبتا پیچ در پیچی تبعیت میکننو براشون توابع و کلاس هائی نوشته که C++ builder با اونا و با اون شیوه ها کار میکنه و ما با توابع و کلاسای C++ builder , تا هم کار ساده تر شه هم بعضی چیزا که تو C++ win32 باید پایه ای رفت نوشتو اون باهاشون کار کرده و ساخته و به شکل کتابخونه آماده درشون آورده و ما با اونا کار می کنیم؟(مثل توابع کار با تصویر و صوت و ...)
اگه اینا نیس قضیه روشنم کنین , ممنون

intel_amd
دوشنبه 02 بهمن 1391, 09:03 صبح
کسی که جواب نداد , حتی مدیر بخش
اما خودم جواب را یافتم و اینجا میگم اگر کسی خوند روشن شه
تقریبا همونه که بالا گفتم اما دقیق ترش : برای اپلیکیشن ساختن تحت یک سیستم عامل باید از api های اون سیستم عامل استفاده کرد
تحت ویندوز اینها به win32 api معروفن
پروژه c++ از جنس win32 یعنی اینکه محیط برنامه نویسی که به شما اجازه استفاده از api های ویندوز مستقیم میده
mfc یک سری کلاس ها و توابعی هستند (کتابخونه) که api ها را داخل توابع و کلاساشون استفاده کردن تا ما خیلی ساده تر با توابع و کلاس های mfc کار کنیم چون کار مستقیم با api ها یکم پیچ پیچیه
6 C++ builder هم یک سری کلاس ها و توابعی هستند (کتابخونه) که api ها را داخل توابع و کلاساشون استفاده کردن تا ما خیلی ساده تر با اینا کار کنیم , فرق این با mfc اینه که اولا ساده تره دوما از mfc گسترده تره
C++ builder xe3 نسبت به 6 برای کارای بیشتری توابع و کلاس آماده داره , مثل فرق دات نت 1 با 4

intel_amd
دوشنبه 02 بهمن 1391, 11:07 صبح
فقط این جمله "both Delphi and C++Builder use the Delphi RTL" که تو سایت embarcadero خوندم برام عجیبه , یعنی C++ builder,delphi هر دوشون از delphi RTL استفاده می کنن بجای win32 api ؟

BORHAN TEC
چهارشنبه 04 بهمن 1391, 22:28 عصر
سلام

...C++‎‎ builder xe3 نسبت به 6 برای کارای بیشتری توابع و کلاس آماده داره , مثل فرق دات نت 1 با 4...
فقط اینها نیست. C++‎ Builder خیلی گسترده تر از این حرفهاست که می گویید که شامل یک IDE قدرتمند، 3 کامپایلر(فعلاً برای Win32 و Win64 و OS X)، دو فریمورک اصلی شامل VCL و FireMonkey و خیلی چیزهای دیگه میشه!

فقط این جمله "both Delphi and C++‎‎Builder use the Delphi RTL" که تو سایت embarcadero خوندم برام عجیبه , یعنی C++‎‎ builder,delphi هر دوشون از delphi RTL استفاده می کنن بجای win32 api ؟
کلمه "بجای" کاملاً اشتباه است. در C++‎ Builder شما می توانید از کدهای دلفی هم استفاده کنید. بیشتر قسمت های VCL و FireMonkey با دلفی ساخته شده اند(بیش از 90%) و شما می توانید از آنها در C++‎ Builder استفاده کنید. اینکه C++‎ Builder میتونه از کدهای دلفی هم بهره ببره خیلی عالیه و سرعت پیشرفت پروژه C++‎ Builder رو خیلی بالا میبره.

intel_amd
پنج شنبه 05 بهمن 1391, 00:43 صبح
سلام دوست عزیز , چه عجب یه نفر به این تاپیک سر زد !
ممنون از پاسختون , چنتا چیز برام مبهمه
اینکه C++‎‎‎ builder مگه مثل mfc کتابخونشو با win32 api ننوشته ؟ واسط دیگه ای استفاده کرده؟
vcl و firemonky را چرا با دلفی نوشته نه win32 api ؟ اینجوری سرعت پائین نیمده؟
چرا بعضی برنامه ها رو هر سیستمی اجرا نمیشن و اشکال RTL میگیره؟ آیا DLL های خاصی رو سیستم طرف نیست و با Embed کردنشون درست میشه؟
آیا (RTL (run time library مثل .net نیست و سرعتش هم پائین نیست؟

intel_amd
شنبه 07 بهمن 1391, 14:17 عصر
کسی اگه اطلاعات کاملی داره بابت پاسخ گوئی به یک سری سوالاتم هزینه هم پرداخت می کنم

BORHAN TEC
یک شنبه 08 بهمن 1391, 15:29 عصر
سلام

اینکه C++‎‎‎‎ builder مگه مثل mfc کتابخونشو با win32 api ننوشته ؟ واسط دیگه ای استفاده کرده؟
در حقیقت کتابخانه های C++ Builder هم به سیستم عامل وابسته هستند و کار فریم ورک هم این است که با ایجاد یک سطح انتزاعی این پیچیدگی ها از دید برنامه نویس پنهان شود.

vcl و firemonky را چرا با دلفی نوشته نه win32 api ؟
اگر به جمله قبلی من دقت کنید متوجه این اشتباه خود می شوید. VCL به شدت به سیستم عامل ویندوز وابسته است و برنامه ساخته شده با VCL را نمی توان به سیستم عاملهای دیگر مثل OS X انتقال داد، چرا که از کنترلهای ویندوز استفاده می کند. و اما FireMonkey (اختصاراً FM): در FM کنترلها و کتابخانه به صورتی طراحی شده که به سیستم عامل خاصی وابسته نباشد. به عبارتی تمامی کنترلها را خودشان طراحی کرده اند. هدف از انجام این کار این است که بتوانند به صورت Cross Platform برنامه ها را در سیستم عامل های مختلف کامپایل کنند و از آن اجرا بگیرند. مشکل FM در حال حاضر این است که از Right To Left Direction به خوبی پشتیبانی نمی کند. البته Marco Cantu (که سمت Delphi Product Manager را دارد) در یک Road Map گفته که قصد دارند این مشکل را حل کنند.

اینجوری سرعت پائین نیمده؟
خیر. این موضوع را اصلاً نباید با ساختار JIT در دات نت اشتباه بگیرید. در دلفی و C++ Builder برنامه ها به ساختار میانی(مانند MSIL و امثال آن) ترجمه نمی شوند و کاملاً Native هستند و از سرعت بسیار بالایی برخوردار هستند. البته برنامه هایی که از ابتدا با Win32 API ساخته می شوند ممکن است که کمی سرعت بالاتری داشته باشند ولی توجه داشته باشید که ساخت برنامه ها به این شکل بسیار دشوار است و از آنجایی که در این نوع برنامه سازی از یک فریم ورک مناسب استفاده نمی شود در آینده باگهای زیادی در برنامه پدیدار می شود که حل کردن آنها بسیار بسیار بسیار دشوار است!

چرا بعضی برنامه ها رو هر سیستمی اجرا نمیشن و اشکال RTL میگیره؟
دلایل مختلفی ممکن است داشته باشد ولی اگر در ساخت و تست برنامه اصولی کار کرده باشید با مشکلات این چنینی مواجه نخواهید شد. در هر صورت در این مورد با این اطلاعات کمی که دادید نمی توان جواب بهتری داد. در صورت تمایل می توانید برای این مشکل یک تاپیک جدا گانه ایجاد کنید و مشکل را به شکل دقیقتری مطرح کنید.

آیا DLL های خاصی رو سیستم طرف نیست و با Embed کردنشون درست میشه؟
بستگی داره، DLL های خود سیستم عامل یا DLL های شخص ثالث؟ خود فایلهای کتابخانه ای ممکن است به کتابخانه های دیگری وابسته باشند که توسط نرم افزارهایی مثل Dependency Walker می توان این وابستگی ها را مشاهده کرد. ولی از آنجا که کتابخانه VCL بسیار جامع می باشد معمولاً شما درگیر این موارد نمی شوید و زیاد نگران این موضوعات نخواهید بود. در بیش از 90 درصد موارد استفاده از محصولاتی مثل JVCL و Raize Components و LMD Components و چند محصول با کاربردهای خاص تر در کنار VCL باعث می شود که شما دیگر به هیچ چیز دیگری نیاز نداشته باشید و هر آنچه که نیاز دارید در این مواردی که نام بردم خواهید یافت. البته این امر هم ا حد زیادی به سطح آشنایی شما با این محصولات و کتابخانه ها بستگی دارد.

آیا (RTL (run time library مثل .net نیست و سرعتش هم پائین نیست؟
برنامه های ساخته شده با دلفی و C++ Builder از سرعت بسیار بالایی برخوردار هستند و اصلاً با برنامه های دات نتی قابل قیاس نیستند.
موفق باشید...

intel_amd
یک شنبه 08 بهمن 1391, 22:11 عصر
از پاسخ های خوبتون ممنون اما یه چیزائی همچنان مبهم هستن که دقیق تر مطرحشون میکنم
اون مسئله RTL و اجرا نشدن فایل روی هر سیستمی برمیگرده به تست سمپل های خود c++ builder از فایر مانکی
کتابخانه های vcl روی هر سیستمی هستند؟
اون هم که گفتم چرا vcl و fm را با دلفی نوشتن منظورم اینه چرا با چیز سریع تری ننوشتنش , مثل خود C++ که برای ویندوز از win32 api استفاده کنه و برای مک از api های مک , چون کتابخانه های حرفه ای و سریع معمولا اینجورین که با C++ نوشته میشن و برای استفاده از api های ویندوز از win32 و مک api های خودشو استفاده می کنن , مثل adobe , autodesk

BORHAN TEC
یک شنبه 08 بهمن 1391, 23:50 عصر
اون مسئله RTL و اجرا نشدن فایل روی هر سیستمی برمیگرده به تست سمپل های خود C++‎ builder از فایر مانکی
بستگی داره که منظور شما از اجرا نشدن چی باشه. ببینید ظاهر فرم ها در FM به صورت HD است و برای ترسیم درست آن از پردازنده GPU استفاده میشود. فکر می کنم که منظور شما هم همین باشد. در ضمن FM2 هم نسبت به FM تغییراتی داشته که باعث میشه که همه مثالهایی که با FM1 ساخته شده اند با FM2 سازگار نباشند.

کتابخانه های vcl روی هر سیستمی هستند؟
نه نیستند. به هر حال انتقال پکیجهای VCL مثل .Net دشوار نیست و با کپی کردن چند فایل در کنار برنامه اجرایی، برنامه به راحتی و بدون مشکل اجرا می شود. البته شما می توانید که کتابخانه های مورد نیاز را به صورت استاتیک به برنامه خودتان پیوند بزنید که در این صورت حصل برنامه فقط یک فایل EXE میشود که برای اجرا دیگر فقط به سیستم عامل وابسته خواهد بود و به هیچ فایل دیگری وابسته نخواهد بود. چندی پیش در رابطه با Stand Alone کردن برنامه در این صفحه توضیح داده ام:
http://mtpars.org/showthread.php?tid=249

اون هم که گفتم چرا vcl و fm را با دلفی نوشتن منظورم اینه چرا با چیز سریع تری ننوشتنش , مثل خود C++‎ که برای ویندوز از win32 api استفاده کنه و برای مک از api های مک , چون کتابخانه های حرفه ای و سریع معمولا اینجورین که با C++‎ نوشته میشن و برای استفاده از api های ویندوز از win32 و مک api های خودشو استفاده می کنن, مثل adobe , autodesk
این دو موضوع را هیچ وجه تشابهی با هم ندارند. استفاده از Win32 API یک روش دسترسی به API های ویندوز است و VCL و FM هم فریم ورک هستند. شما در Delphi و C++ Builder هم به راحتی می توانید از توابع API سیستم عامل استفاده کنید مثل Visual C++ و ... . در مورد FM و VCL هم دقیقاً همینطور است که می گویید. سازندگان این دو در ویندوز از توابع ویندوز و در مک از توابع مک استفاده کرده اند که انجام این کار با کامپایلهای شرطی انجام شده است. به عنوان مثال این قسمتی از یونیت SysUtils است:
function RemoveDir(const Dir: string): Boolean;
{$IFDEF MSWINDOWS}
begin
Result := RemoveDirectory(PChar(Dir));
end;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
var
StatBuf: _stat;
M: TMarshaller;
P: Pointer;
begin
P := M.AsAnsi(Dir, CP_UTF8).ToPointer;
if (lstat(P, StatBuf) = 0) and S_ISDIR(StatBuf.st_mode) and
S_ISLNK(StatBuf.st_mode) then
begin
Result := unlink(P) <> -1;
end
else
Result := __rmdir(P) = 0;
end;
{$ENDIF POSIX}

Ananas
دوشنبه 09 بهمن 1391, 00:08 صبح
سلام.

اون مسئله RTL و اجرا نشدن فایل روی هر سیستمی برمیگرده به تست سمپل های خود C++‎ builder از فایر مانکی
تو c++builder به طور پیش فرض تنظیمات مربوط به این قضیه رو حالتی هست که این کتابخونه ها به فایل اجرایی متصل نمیشن و باید فایلشون رو سیستم باشه تا بتونه لود کنه. و شما می تونید تیک اش رو غیر فعال کنید تا این کتابخونه ها لینک بشن.

کتابخانه های vcl روی هر سیستمی هستند؟
منظورت کدوم کتابخونه هست؟ البته در هر صورت جواب نخیر هست. visual componnent library کتابخونه ای از اشیای بصری هست که برای اجرا و استفاده نیاز اطلاعاتی داره که می تونید به فایل اجرایی لینک کنید یا اینکه فایهای bpl لازم رو برای لود کردن در اختیارش بگذارید. اگه لینک نکنید لازمه رو سیستم کاربر کپی کنید و زمانی خوبه که چند تا فایل اگزه دارید که از این کتابخونه ها به طور مشترک استفاده می کنن و با لینک نکردنشون به فایل اگزه، حجم فایل هایی با اطلاعات تکراری رو کم میکنید.

اون هم که گفتم چرا vcl و fm را با دلفی نوشتن منظورم اینه چرا با چیز سریع تری ننوشتنش , مثل خود C++‎ که برای ویندوز از win32 api استفاده کنه و برای مک از api های مک , چون کتابخانه های حرفه ای و سریع معمولا اینجورین که با C++‎ نوشته میشن و برای استفاده از api های ویندوز از win32 و مک api های خودشو استفاده می کنن , مثل adobe , autodesk
خوب در اینجا وقتی گفته میشه با دلفی نوشته شده منظور اینه که به زبان پاسکال کدنویسی شده و vcl هم از توابع win32 استفاده میکنه و فکر میکنم دلیل اینکه اون رو با c++ ننوشتن این هست که اگه به دو تا زبان کد نویسی بشن دوباره کاریه و ممکنه در بعضی قسمت ها عملکرد متفاوت در این دو تا به وجود بیاد و میشه گفت کار عاقلانه ای نیست و حالا اگه بین پاسکال و c++ یکی رو بخوایم انتخاب کنیم باید اون یکی هم بتونه ازش استفاده کنه و چون c++ انعطاف بیشتری داره و امکان استفاده از کدهای دلفی در c++builder هست ولی برعکس این امکان برای دلفی وجود نداره و دلفی مجبوره از طریق dll و این جور روشها از کد های c++ استفاده کنه پس نوشتن vcl و fm با دلفی این مزیت رو داره. شاید دلیل یکطرفه بودن این ارتباط این باشه که تبدیل کدهای پاسکال به c++ (حداقل به طور اتوماتیکی) راحت تر هست.

intel_amd
دوشنبه 09 بهمن 1391, 03:22 صبح
با پاسخ های دوستان به اکثر جواب هام رسیدم واقعا ممنون

Hadiir.net
دوشنبه 14 اسفند 1391, 02:40 صبح
سلام
یکی صادقانه و بدون تعصب بگه که کدوم IDE بهتره؟
ای دی ئی های مایکروسافت مثلا ویژول استودیو 2010 یا این سی پلاس پلاس بیلدر ایکس تری؟
تشکر

Ananas
دوشنبه 14 اسفند 1391, 07:21 صبح
یک اشکالی که c++builder داره اینه که عبارات مکرو که با define تعریف میشن تو code complation نیستن. یعنی وقتی دارید کد می نویسید و ctrl + space رو می زنید عبارات مکرو تو لیست نیستن. این در مورد c++builderXE2 و قبل از اون هست و در مورد XE3 نمی دونم این اشکال برطرف شده یا نه. لطفا اگه کسی xe3 نصب داره امتحان کنه و نتیجه رو بگه (ترجیحا روی یک Win32 Form Application). مثلا عبارت VK_LBUTTON رو می تونید امتحان کنید البته قبلش windows.h رو include کنید. یا مثلا یک مکرو خودتون تعریف کنید :
#define M_DEFINED 10
const M_CONST = 10;
int count = M_...
وقتی به سه نقطه میرسیم ctrl + space میزنیم باید M_DEFINED هم مثل M_CONST تو لیست کرکره ای دیده شه.
غیر از این مورد c++builder از نظر من خوبه مشکلی با اون ندارم عالیه.

BORHAN TEC
پنج شنبه 17 اسفند 1391, 12:57 عصر
سلام

لطفا اگه کسی xe3 نصب داره امتحان کنه و نتیجه رو بگه
این مشکل همچنان وجود دارد.:ناراحت: