# Native Code > برنامه نویسی با C > برنامه نویسی با MFC و ++Visual C > سوال: پورت سریال در MFC یا CLR !

## Hadi.Nasiri

سلام 
مقاله خوبی بود، مرسی
راستش چند تا سوال به ذهنم رسید که تو اون مقاله جوابی براشون پیدا نکردم، ممنون میشم اگه جواب بدید:
1) هدف من از کد نویسی با VC++‎ بیشتر مانیتورینگ و کنترل سیستم های میکروکنترلیه و خوب واسه این کارا دقت و سرعت بالایی نیاز نیست. به خاطر اینکه بیشتر از 3 ساله با Basic کار نکردم اصلا دوست ندارم سراغ VB برم، حوصله یادگرفتن #C رو هم ندارم.اصلی ترین سوال من اینکه به نظر شما آیا کار با پورت سریال تو MFC راحته یا برم سراغ CLR ؟(راستش از مقاله ای که واسه کد نویسی تو MFC برای سریال پورت معرفی کردید چیزی سر در نیاوردم :ناراحت: )
2) ظاهرا برای اینکه از کد نویسی برای پورت سریال خلاص بشم مجبورم MFC رو رها کنم و به سمت CLR (یا همون .NET ) یا کد نویسی تلفیقی برم. اگه تا اینجاشو درست فهمیده باشم حالا واسه شروع کار با .NET  تو VC++‎ چه کتاب فارسی رو پیشنهاد می کنید ؟ (تو پست کتاب های پیشنهادیتون چیزی واسه .NET ندیدم)
3) منظور از برنامه نویسی تلفیقی کدوم نوعه(CLR/Console Application یا ATL یا General یا ...) و آیا یادگیریش سخته ؟
با کمال پررویی ممنون میشم اگه لطف کنید و جواب 3 سوالمو جدا جدا بدید  :خجالت:

----------


## habibetaheri

سلام
من به کمک همین سایت پورت سریال کار کردم خیلی خیلی راحت بود . لینکش دادم
https://barnamenevis.org/showthread.php?t=150260
موفق باشید

----------


## Hadi.Nasiri

سلام دوست عزیز
بابت راهنماییتون ممنون
منم مثل شما الکترونیک خوندم و با VC++‎ هم خیلی کار نکردم راستش تازه شروع کردم.تنها مشکلم ارتباط با RS232 که امبدوارم با کمک شما و دیگز دوستان حل بشه.
راستش من یه سر به http://www.codeguru.com/cpp/com-tech...rint.php/c7349 زدم، مثال جالب و کاملی داشت ولی مشکل من اینکه مراحلی که تو مثال برای *ایجاد* پروژه طی کرده با Visual Studio من فرق داره. مثلا تو منوی project من گزینه add to project نیست. من از ورژن 2008 استفاده می کنم. بد جوری گیج شدم. ممنون میشم اگه بیشتر راهنماییم کنید.

----------


## Nima_NF

این کنترل که در لینک فوق استفاده می شود، یک کمپوننت Visual Studio 6 هست و همراه آن نصب می شود و در حالت عادی در ++visual C نسخه های جدید وجود ندارد. لذا توصیه می کنم که از آن استفاده نکنید.

چند پیشنهاد دارم:
1- اگر دنبال کمپوننت ها و امکانات آماده هستید، کلا برنامه نویسی ++C را کنار بگذارید و به سراغ #C یا هر زبان برنامه نویسی تحت .NET بروید.

یا
2- در کنار همان برنامه نویسی C++‎/MFC به مطالعه C++‎/CLI از کتاب زیر بپردازید یا مقاله برنامه نویسی تلفیقی کنترل های .NET در MFC در "نسخه اول مجله برنامه نویس"را  مطالعه کنید. (که همان قدر مانند #C باید وقت بگذارید)
کتاب: Beginning Visual C++‎ 2008 - Ivor Horton

یا
3- کلا کمپونت های آماده را فراموش کنید و با کدنویسی که در تاپیک قبل معرفی کردم و تنها با API های موجود برای ++C کارها را انجام دهید و از com بخوانید.

یا 
4- بگردید، شاید کپوننت های تجاری در اینترنت برای استفاده وجود داشته باشد.

پاورقی: ضمنا لطفا در صورتی که سوالات شما مرتبط به یک موضوع مشخص هست، تنها در یک تاپیک به آن ها بپردازید (همانند همین تاپیک) و تاپیک جدید دیگری باز نکنید.

----------


## Nima_NF

> ولی مشکل من اینکه مراحلی که تو مثال برای *ایجاد* پروژه طی کرده با Visual Studio من فرق داره. مثلا تو منوی project من گزینه add to project نیست. من از ورژن 2008 استفاده می کنم.


در هر حال، جواب این سوال:
در VC++‎2008 در MFC ، به نمای  طراحی دیالوگ بروید و راست کلیک کنید و گزینه Insert ActiveX control را انتخاب کنید.


در پایان هم یک نمونه مثال برای خواندن از Com توسط یک سایت سخت افزار :
http://www.ontrak.net/mfc.htm

و یک نمونه سورس مثال فایل Zip  برای RS232  در :
http://www.taltech.com/freesoftware/SER2416B.htm

----------


## Hadi.Nasiri

سلام دوستان واسه راهنمایی های خوبتون ممنونم راستش من مثال http://www.codeguru.com/cpp/com-tech...rint.php/c7349 رو نگاه کردم، متوجه شدم چیکار کرده و فایل Zip شده پروژه رو هم که Upload کرده، برداشتم و خودم کامپایلش کردم. بدون هیچ مشکلی Build شد و فایل exe خروجیشم کاملا درست کار می کنه. حالا تصمیم گرفتم خودم برنامه رو طبق نمونه یکبار دیگه بنویسم(تو Visual Studio 2008) . دقیقا مراحلی روکه گفته بود رفتم ولی در نهایت با 10 Error مواجه شدم ولی نتونستم خطایابی کنم. اینم خطاهاش: 

1>.\SerialView.cpp(61) : error C2039: 'SetCommPort' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(62) : error C2039: 'SetSettings' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(63) : error C2039: 'SetInputLen' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(64) : error C2039: 'SetInputMode' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(65) : error C2039: 'SetRTSEnable' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(66) : error C2039: 'SetRThreshold' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(67) : error C2039: 'SetPortOpen' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(98) : error C2039: 'SetOutput' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(108) : error C2039: 'GetCommEvent' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'
1>.\SerialView.cpp(111) : error C2039: 'GetInput' : is not a member of 'CMscomm1'
1> c:\users\hadi\documents\visual studio 2008\projects\serial\serial\mscomm1.h(11) : see declaration of 'CMscomm1'

راستی متغییر هاشم مطمئنم درست تعریف کردم.(از رو پروژه اصلی نگاه کردم). چون حجم برنامه زیاد فقط کد برنامه رو میزارم.(فلیل zip)

ممنون میشم کمکم کنید.

----------


## habibetaheri

من فکر می کنم شما متغیر رو تعریف نمی کنید 
برید توی classWizard و از اونجا member variable  و سپس add variable انتخاب کنید و یه متغیر به اسم m_comm از نوع کنترل تعریف کنید و سپس ران کنید
باید مشکلتون حل بشه .
پورت سریال رو برای چه کاری می خواید ؟

----------


## Hadi.Nasiri

سلام آقای طاهری
اگه متظورتون متغیر واسه IDC_MSCOMM1 اتفاقا چرا، یه متغیر کنترلی به نام m_comm تعریف کردم ( public ) و (Variable Type: CMscomm1) ولی اونجایی که باید Header File  و  فایل .cpp رو معرفی کتم، بعد از یکبار معرفی و زدن دکمه Finish دفعه بعد که می خوام متغیر IDC_MSCOMM1 رو ببینم جای Header File و فایل .ccp خالیه و انگار قبلا معرفیشون نکردم !
همونطوری که قبلا گفتم خیلی راحت اون پروژه ه ای روکه دانلود کردم تونستم build کنم بدون هیچ مشکلی ولی وقتی خواستم خودم بنویسم 10 تا Error داد.
شما خودتون این برنامه رو دوباره نویسی کردید تا ببینید جواب میده یا نه ؟
آیا ممکنه نیاز به اضافه کردن فایل خاصی به پوشه برنامه باشه ؟
راستش بد جوری اعصابمو خورد کرده نمی دونم باید چیکارش کنم. منم مثل شما الکترونبک خوندم و پورت سریال رو برای مانیتورینگ و کنترل سیستم های میکروکنترلری نیاز دارم.
ممنون میشم کمکم کنید.

----------


## habibetaheri

> اونجایی که باید Header File  و  فایل .cpp رو معرفی کتم، بعد از یکبار معرفی و زدن دکمه Finish دفعه بعد که می خوام متغیر IDC_MSCOMM1 رو ببینم جای Header File و فایل .ccp خالیه و انگار قبلا معرفیشون نکردم !
> .


منظورتون رو متوجه نشدم . فقط کلاس CFORM  رو انتخاب کنید و
Select "*IDD_Serial_Form*" under "*Dialog*" on the "*Resources View*" tab
نیاز به اضافه کردن هیچ فایلی نیست 
من قبلا همین رو خودم برنامه نویسی کردم با VC++‎6 جواب هم گرفتم .یه بار دیگه هم دوباره الان امتحان کردم مشکلی نداشت.
 10 تا ارور یعنی هر کدوم از توابعی رو که استفاده کردید نمی تونه بشناسه . این توابع به متغیر m_comm نسبت داده می شه اگه این متغیر درست تعریف نشده باشه ، طبیعیه که 10 تا ارور می ده . چون 10 تا تابع استفاده کردید 10 تا ارور میده . ولی مشکلش فقط نشناختن متغیره 
خیلی با دقت همه مراحل انجام بدید نباید مشکلی باشه
یه سوال الکترونیکی .امیدوارم خلاف قوانین سایت نباشه . شما در مورد apr9600 ,isd4004 (آی سی صدا ) اطلاعاتی دارید ؟ 
موفق باشید

----------


## Hadi.Nasiri

ممنون بابت راهنماییتون
مشکل من تفاوت شکل دستورا بود که حل شد. مثلا تو ورژن Studio من باد 
(m_comm.put_InputLen(1 باشه ولی تو مثال سایت m_comm.SetInput بود.
اما سوالتون در مورد isd4004 ، تا حالا خودم راش ننداختم ولی فکر نکنم مشکل خاصی داشته باشه، احتمالا ارتباظش SPI و دیتاشیت نسبتا کاملی داره. 
شما تو کد نویسیش مشکل دارید ؟(امیدوارم پاسخ به این سوال برخلاف قوانین سایت نباشه)

----------


## habibetaheri

خدا رو شکر که مشکلتون حل شد . از چیز مهمی جواب گرفتید .
مشکل من توی کد نویسیه. صدایی رو که ضبط کردی برای پخش اون باید آدرس خونه ای از حافظه که صدا توی اون ذخیره شده رو بهش بدی تا صدا رو پخش کنه . این کارو میکرو باید انجام بده .حالا من نمی دونم چه جوری ؟؟؟؟؟ 
از سخت افزاری هم ولتاژ خازن ها رو نمی دونم ولی به احتمال قوی باید همون 50 ولت باشه .

----------


## leili7107

سلام
من می خوام با پورت سریال کار کنم و از کتابخانه ComPort استفاده کردم.
آیا برای دسترسی به متد ها مانند Open (برای باز کردن پورت) باید شی ایجاد کنم؟
اگر باید شی ایجاد کنم لطفا دستورش را بگید در غیر این صورت چه جوری می تونم به متدها دسترسی پیدا کنم؟
ممنون :لبخند:

----------


## leili7107

سوال من مربوط به این تاپیک نیست که کسی جواب نمیده؟ :ناراحت: 
من باید تاپیک جدید باز می کردم؟

----------


## leili7107

سلام به همه دوستان
من تونستم برنامه ای پیدا کنم که به صورت دستی فایل کتابخانه comport.dll را برای دسترسی به پورت سریال باز میکند و آن را  به برنامه اضافه می کند.برنامه Mfc  هست و من نمیدونم چه جوری می تونم از توابع این کتابخانه استفاده کنم.
کسی می تونه به من کمک کنه که بتونم اطلاعات را از پورت بخوانم و به پورت بفرستم؟
آیا باید شی بسازم تا بتوانم از توابع استفاده کنم؟

----------

