# Native Code > برنامه نویسی با C > برنامه نویسی با MFC و ++Visual C >  سوال در مورد ATL

## khasteh

با سلام به همه دوستان و ممنون از همه
راستش یه سوال بدجوری منو درگیر کرده و اون اینه با توجه به اینکه در برنامه ها گاهی هدر های atl  رو استفاده میکنیم چرا هیج جا سخن نیست از atl .
 نمی دونم اینجا مناسبه این سوال هست یا خیر 
اصلا ATL   چیه ؟
کاربرد هاش کجاست ؟
تو ایران چه جوریه وضعش ؟ 
ممنون از همه و بخصوص مدیر  بخش .

----------


## A_Salimi

> اصلا ATL چیه ؟


در حقیقت ATL همان (Active Template Library)  یکسری الگو بر پایه  کلاسهای پایه ای مایکروسافت است که شما به آسانی  و سرعت می توانید اشیای com (Component Object Model) را خلق نمایید .ساپورت کردن com در visual C++‎ این اجازه را به برنامه نویسان میدهد که آبجکت های متنوع com و کنترل های اکتیوایکس را ایجاد نمایند.




> کاربرد هاش کجاست ؟


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

این لینک را هم ببینید

----------


## khasteh

ممنون ولی atl server  و کلا سایت هایی که می تونن بر اسا س C++‎ , com  باشند  اونا چی ؟
 من هم قبول دارم که یک زبان برنامه نویسی نیست و یک کتابخانه است مثال واضح هم همین mfc  خودمونه .ولی با اون خیلی کارا و اپلیکشن های عظیم و کار امدی مینویسن.  در کل آیا نمیشه یه شناخت از atl  داشت؟
آیا ما نمی تونیم مثلا یه جایی تو یک پروژه رو با atl بنویسیم و زودتر نتیجه دلخواه و بگیریم؟ هرچند معتقد به کارآمدی پروژه و نیاز ها و زمان و هزینه هستم .

----------


## A_Salimi

Atl server در حقیقت مجموعه ای از کلاسهای native در C++‎ است که به برنامه نویسان اجازه می دهد که برنامه های وب ، سرویس های وب XML و دیگر برنامه های سرور را خلق نمایید .

برای شروع و استفاده از Atl server شما می توانید ATL Server tutorial را مطالعه نمایید و یا در مورد ATL 
Server architecture اطلاعاتی را کسب نمایید .

----------


## khasteh

وب سایتی رو سراغ دارین که با مولفه های ATL و تحت native C++‎  نوشته شده باشد؟

----------


## mehdi.mousavi

> وب سایتی رو سراغ دارین که با مولفه های 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

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

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

----------


## mehdi.mousavi

> خبر بد اینه که 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

> 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

> از اول هم ایده گذاشتن پروژه های 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

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

----------


## khasteh

سلام  با تشکر از دوستان خوب
 یه مقایسه کوچولو دیدم بین ATL و ASP.NET  البته برای  Web Service   دیدم بد نیست اینجا بذارم.  
http://www.codeproject.com/KB/webser...omparison.aspx

----------


## mari2011

با سلام

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

----------

