PDA

View Full Version : سوال در مورد ATL



khasteh
دوشنبه 27 آبان 1387, 23:26 عصر
با سلام به همه دوستان و ممنون از همه
راستش یه سوال بدجوری منو درگیر کرده و اون اینه با توجه به اینکه در برنامه ها گاهی هدر های atl رو استفاده میکنیم چرا هیج جا سخن نیست از atl .
نمی دونم اینجا مناسبه این سوال هست یا خیر
اصلا ATL چیه ؟
کاربرد هاش کجاست ؟
تو ایران چه جوریه وضعش ؟
ممنون از همه و بخصوص مدیر بخش .

A_Salimi
سه شنبه 28 آبان 1387, 14:44 عصر
اصلا ATL چیه ؟در حقیقت ATL همان (Active Template Library) یکسری الگو بر پایه کلاسهای پایه ای مایکروسافت است که شما به آسانی و سرعت می توانید اشیای com (Component Object Model) را خلق نمایید .ساپورت کردن com در visual c++ این اجازه را به برنامه نویسان میدهد که آبجکت های متنوع com و کنترل های اکتیوایکس را ایجاد نمایند.


کاربرد هاش کجاست ؟یک کتابخانه است که شما می توانید از آن استفاده کنید و نه یک زبان برنامه نویسی که کاربرد مجزا داشته باشد.

این لینک (http://www.answers.com/topic/active-template-library) را هم ببینید

khasteh
سه شنبه 28 آبان 1387, 21:50 عصر
ممنون ولی atl server و کلا سایت هایی که می تونن بر اسا س c++ , com باشند اونا چی ؟
من هم قبول دارم که یک زبان برنامه نویسی نیست و یک کتابخانه است مثال واضح هم همین mfc خودمونه .ولی با اون خیلی کارا و اپلیکشن های عظیم و کار امدی مینویسن. در کل آیا نمیشه یه شناخت از atl داشت؟
آیا ما نمی تونیم مثلا یه جایی تو یک پروژه رو با atl بنویسیم و زودتر نتیجه دلخواه و بگیریم؟ هرچند معتقد به کارآمدی پروژه و نیاز ها و زمان و هزینه هستم .

A_Salimi
چهارشنبه 29 آبان 1387, 11:08 صبح
Atl server در حقیقت مجموعه ای از کلاسهای native در C++ است که به برنامه نویسان اجازه می دهد که برنامه های وب ، سرویس های وب XML و دیگر برنامه های سرور را خلق نمایید .

برای شروع و استفاده از Atl server شما می توانید ATL Server tutorial (http://msdn.microsoft.com/en-us/library/60kkc2ah%28VS.80%29.aspx) را مطالعه نمایید و یا در مورد ATL
Server architecture (http://msdn.microsoft.com/en-us/library/bhthse86%28VS.80%29.aspx) اطلاعاتی را کسب نمایید .

khasteh
پنج شنبه 07 آذر 1387, 18:40 عصر
وب سایتی رو سراغ دارین که با مولفه های ATL و تحت native c++ نوشته شده باشد؟

mehdi.mousavi
شنبه 23 آذر 1387, 18:16 عصر
وب سایتی رو سراغ دارین که با مولفه های ATL و تحت native c++ نوشته شده باشد؟

سلام.
ATL ربطی به طراحی وب سایت نداره - اگر چه Component های ایجاد شده بر اساس تکنولوژی COM (که میتونه بر پایه MFC یا ATL نوشته بشه) رو میشه از طریق SOAP Toolkit بصورت یک Web Service در معرض دسترس قرار داد یا IIS رو وادار به Handle کردن HTTP Request ها و Dispatch کردن اونها بین Request Handler های یک Web App کرد.

اما اینایی که گفتم رو میتونید نادیده بگیرید، چون هدف اصلی ATL دادن مجموعه ای از کلاسهای Template ای به برنامه نویسها هستش که حداقل Footprint (یا همون سربار) رو در طراحی Component هاشون داشته باشن. وقتی میگم Component، منظورم همون Component های تولید شده بر مبنای COM بطور اخص هستش!

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


NT-Service اجرا کنید
در IE از اونها استفاده کنید
Web Service هایی بر پایه COM داشته باشید
Standalone EXE Server هایی داشته باشید که بر اساس درخواست استفاده کننده Load میشن
DLL هایی داشته باشید که svchost اونها رو load کنه (که به svchost یک Surrogate میگن)
و ...

اما شگفت انگیزترین مساله در مورد COM ها، امکان استفاده از Component های طراحی شده، در زبانهای و محیطهای برنامه نویسی دیگه هستش. بعنوان مثال، شما میتونید Component ای رو که طراحی کردید در .NET و از طریق InterOp، یا در Visual Basic (بشرط Implement کردن IDispatch)، یا در دیگر محیطهای مورد نظرتون اجرا کنید.

مزایای استفاده از این تکنولوژی وقتی بیشتر به چشم میاد که بخواهید سیستمی مبتنی بر این تکنولوژی بصورت Distribute طراحی کنید. نیاز مبرم چنین سیستمهایی، امکان کنترل Transaction هاست، که با استفاده از MSDTC بطرز هیجان انگیزی این مساله در COM+ حل شده و بخشی از Enterprise DNA مایکروسافت رو تشکیل داده.

در هر حال، اگر هدفتون طراحی یه Web Site، Web App یا حتی یک Web Service هستش، این تکنولوژی چیز خاصی رو براتون به ارمغان نمیاره. در حال حاضر تکنولوژیهای دیگه ای هستن که در این زمینه، گوی سبقت رو از بقیه ربودن و مجال استفاده از تکنولوژیهای پیچیده ای مثل COM رو در این عرصه کاملا از بین بردن.

اگر به CPP کاملا مسلط هستید، پیشنهاد میکنم کتاب The Essence of COM رو بخونید! کتابهای ATL Internals و Inside ATL (البته نمیدونم واقعا اینها در حال حاضر در دسترس باشن یا نه، چون حداقل مال 9 سال پیش هستن) هم کتابهای فوق العاده ای هستن که شما رو در سطح بسیار خوبی با این تکنولوژی آشنا میکنن.

C++Lover
دوشنبه 16 دی 1387, 13:03 عصر
خبر بد اینه که Microsoft بیشتر کتابخانه ATL Server رو به صورت shared source به Codeplex منتقل کرده به همین دلیل اثری از ATL Server در VS2008 و MSDN نیست. اما بعضی از کلاسهای ATL Server هم به ATL انتقال داده شدن.
در ضمن سالهاست که ATL و به خصوص کلاسهای Utility اش جزء جدایی ناپذیر برنامه نویسی MFC هستن.

یاد روزهای خوب برنامه نویسی Native تو Windows بخیر...

mehdi.mousavi
دوشنبه 16 دی 1387, 16:58 عصر
خبر بد اینه که Microsoft بیشتر کتابخانه ATL Server رو به صورت shared source به Codeplex منتقل کرده به همین دلیل اثری از ATL Server در VS2008 و MSDN نیست.از اول هم ایده گذاشتن پروژه های ATL Server هنگام new کردن یه پروژه، در VS2005 به نظر من کار درستی نبود. همونطور که قبلا هم گفتم، ATL برای مقاصد دیگه ای ساخته شده بود و اصلا نباید قاطی تکنولوژیهای وب (بدین شکل) می شد.


در ضمن سالهاست که ATL و به خصوص کلاسهای Utility اش جزء جدایی ناپذیر برنامه نویسی MFC هستن. ATL ربطی به MFC نداره و ترکیب این دو تا جالب نیست (اگرچه امکانپذیره). اگه قراره از MFC استفاده بشه، کلاسهای فربهی وجود داره که همون کارایی رو در اختیار کاربر بگونه ای دیگه قرار میده. هدف اصلی هنگام استفاده از ATL، بهره مند شدن از Footprint پایین اونه که اگه با MFC ترکیب بشه، دیگه اون هدف میسر نمیشه.

اما، اگر در جمله ای که گفتید، جای ATL کلمه STL رو بذاریم، جمله اتون خیلی بهتر و منطقی تر خواهد بود. STL بهمراه کلاسهایی که با ایده اولیه "کارایی بالا" طراحی شدن، تو MFC خیلی به درد میخوره و جایگزین های بسیار خوبی برای کلاسهایی از قبیل CMap، CArray و ... در اختیار برنامه نویس قرار میده.

C++Lover
دوشنبه 16 دی 1387, 21:36 عصر
ATL ربطی به MFC نداره و ترکیب این دو تا جالب نیست (اگرچه امکانپذیره). اگه قراره از MFC استفاده بشه، کلاسهای فربهی وجود داره که همون کارایی رو در اختیار کاربر بگونه ای دیگه قرار میده. هدف اصلی هنگام استفاده از ATL، بهره مند شدن از Footprint پایین اونه که اگه با MFC ترکیب بشه، دیگه اون هدف میسر نمیشه.

اول اینکه من نگفتم MFC رو تو پروژه های ATL استفاده کنیم بلکه گفتم کلاسهای ATL رو تو پروژه های MFC استفاده کنیم. لطفا پست رو درست بخونید بعد جواب بدید.
جالبه که شما در مورد منطقی بودن جمله من نظر میدید در صورتی که حتی جمله من رو درست نخوندید و یا متوجه نشدید. این جمله شما که "ترکیب این دو تا جالب نیست" غیر منطقیه، شما باید مشخص کنید که استفاده از کلاسهای ATL در پروژه های MFC جالب نیست و یا استفاده از MFC در پروژه های ATL مثل ساختن COM Object ها ساختن ActiveX ها و یا Type Library ها جالب نیست. در مورد استفاده از MFC در پروژه های َATL تا حد زیادی با شما موافقم اما در مورد استفاده از ATL در پروژه های MFC باید بگم که هر برنامه نویس با تجربه MFC این رو میدونه که این کار نه تنها ضرری نداره بلکه بسیار مفیده و گاهی اوقات اجتناب ناپذیره.

در مورد مربوط بودن MFC با ATL باید بگم که از زمان VC++.Net2002 به بعد ATL و MFC دارای کلاسهای مشترک زیادی هستند که همگی اونها در واقع در هدرهای ATL تعریف شده اند به این کلاسها میگن کلاسهای مشترک ATL و MFC و لیست اونها به شرح زیره:
CFileTime در هدر atltime.h
CFileTimeSpan در هدر atltime.h
CImage در هدر atlimage.h
COleDateTime در هدر ATLComTime.h
COleDateTimeSpan در هدر ATLComTime.h
CPoint در هدر atltypes.h
CRect در هدر atltypes.h
CSimpleStringT در هدر atlsimpstr.h
CSize در هدر atltypes.h
CStrBufT در هدر atlsimpstr.h
CStringData در هدر atlsimpstr.h
CStringT در هدر atlstr.h و cstringt.h اگر هدر afxstr.h رو نگاه کنید میبینید که از cstring.h و atlcore.h توش استفاده شده.
CTime در هدر atltime.h
CTimeSpan در هدر atltime.h
IAtlStringMgr در هدر atlsimpstr.h
CFixedStringT در هدر cstringt.h
در کل تقریبا توی هر هدر MFC که نگاه کنی رد پای ATL رو پیدا میکنی.
در ضمن برای بعضی کارها که بسیار زیاد در برنامه نویسی ویندوز پیش میان ATL دارای کلاس و تابع هست که در MFC نیست و عاقلانه است که از کلاس ATL مربوطه استفاده کنی. در واقع چون این کلاسها در ATL پیاده سازی شدند دیگه در MFC پیاده سازی نشدند چون همون طور که گفتم ATL عضو جدا ناشدنی از MFC شده و دلیلی برای پیاده سازی دوباره اونها در MFC وجود نداره. برخی از این کلاسها عبارتند از:
CPath
CRegKey
CAutoPtr که مشابه همون auto_ptr در C++ Standard Library هستش
CComPtr
CComQIPtr
CHandle
ماکروهای CT2AEX، CW2TEX ،CW2CTEX ،CT2CAEX و کلاسهای مربوطشون که کار تبدیلات رشته های متنی رو انجام میدن.
ATL OLE DB Consumer Templates که کلا در هدرهای ATL تعریف شدن و من خودم تمامی برنامه های مبتنی پایگاه داده که با MFC نوشتم رو با این Template ها نوشتم.
و خیلی کلاسها، ماکرو ها و توابع دیگه الان یادم نیست.

مگر اینکه شما به هیچ عنوان از این امکانات استفاده نکنید. (بازهم خود MFC از ATL استفاده میکنه)
قبل از جواب دادن بیشتر دقت کنید.

C++Lover
سه شنبه 17 دی 1387, 00:49 صبح
از اول هم ایده گذاشتن پروژه های ATL Server هنگام new کردن یه پروژه، در VS2005 به نظر من کار درستی نبود. همونطور که قبلا هم گفتم، ATL برای مقاصد دیگه ای ساخته شده بود و اصلا نباید قاطی تکنولوژیهای وب (بدین شکل) می شد.

Microsoft تنها پروژه های ATL Server رو از New Project Wizard حذف نکرده بلکه قسمت بزرگی یعنی بیشتر ATL Server رو به صورت shared source به Codeplex منتقل کرده و بقیه رو که کاربرد بیشتری در برنامه نویسی غیر Web Server داشتن رو به ATL منتقل کرده. یعنی اینکه ATL Server دیگه توسط Microsoft پشتیبانی نمیشه. تا جایی که من خبر دارم در CodePlex هم کاری روش انجام نگرفته و در همون مرحله ای هستش در VC2005 SP1 بود. تاسف انگیزش اینه که امکانات خوبی مثل Cryptography ، Regular Expression و SOAP based services که زمانی به طور پیش فرض در VC بودن و توسط Microsoft پشتیبانی میشدن الان دیگه نیستن.
البته برای همه اینها راه حلهای دیگه ای هم وجود داره. در کل برای هر چیزی تو این دنیا راه حلهای دیگه ای هم وجود داره.

mehdi.mousavi
سه شنبه 17 دی 1387, 11:33 صبح
سلام.
هنگام نوشتن مطلب، من مطلقا حواسم به ATL 7.x نبود و مطالبی که گفتم با توجه به ATL 2.1 و ATL 3.0 عرض کردم. و درسته، استفاده از MFC در پروژه های ATL کاملا بی مورده. مایکروسافت هم قدم درستی در این زمینه برداشت و کلاسهای Framework-Independent ای ایجاد کرد که بشه از اونها در همه Framework ها استفاده کرد (به خاطر ماهیت Template ای اونها). اما این کلاسها قبل از ATL 7.0 وجود نداشت، و MFC و ATL کاملا Loosely Coupled بودن و اونموقع دنیا بگونه ای دیگه میچرخید.

khasteh
سه شنبه 01 بهمن 1387, 01:13 صبح
سلام با تشکر از دوستان خوب
یه مقایسه کوچولو دیدم بین ATL و ASP.NET البته برای Web Service دیدم بد نیست اینجا بذارم.
http://www.codeproject.com/KB/webservices/Web_Services_Comparison.aspx

mari2011
سه شنبه 22 فروردین 1391, 23:16 عصر
با سلام

میبخشید به نظر شما پروژه ATL روی چه بروزرهایی اجرا میشه آیا این امکان وجود نداره که همه browser ها اون را ساپورت کنند.
لطفا راهنمایی کنین .
خیلی ممنون.