PDA

View Full Version : سوال: ارتباط با c++ از C#



afi_program
چهارشنبه 27 فروردین 1393, 10:40 صبح
با سلام خدمت دوستان عزیز.

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

با تشکر
موفق باشید

Boy_nn
چهارشنبه 27 فروردین 1393, 11:04 صبح
سلام دوست عزیز شما می تونی یه پروژه C# درست کنی و پروژه C++ رو بهش Add Refrence کنی اینجوری رابط کاربریت C# (WinApp Or WPF هست و برنامه ات C++)

afi_program
چهارشنبه 27 فروردین 1393, 11:37 صبح
ممنون.
کد cpp به عنوان refrence اضافه کنم؟
اگه توضیح بیشتری بدی خیلی ممنون میشم

حسین شهریاری
چهارشنبه 27 فروردین 1393, 13:02 عصر
کد ++C را dll کن و به رفرنسهای برنامه #C اظافه کن.

nrp man
چهارشنبه 27 فروردین 1393, 13:13 عصر
اگر جز رابط گرافیکی دلیل خاصی برای استفاده از #C ندارید.جهت سازگاری بهتر و کاستن از پیچیدگی های مربوط به ارتباط Managed و Unmanaged ، بهتر است به سراغ کتابخانه هایی مثل GTK+ ,JUCE و یا wxWidgets بروید.Qt هم فریم ورک مناسبی است که کتابخانه گرافیکی قابل تحسینی را فراهم آورده.
+
http://en.wikipedia.org/wiki/List_of_platform-independent_GUI_libraries

---
http://msdn.microsoft.com/en-us/library/ms973872.aspx
http://msdn.microsoft.com/en-us/library/ms239720.aspx

مهرداد صفا
چهارشنبه 27 فروردین 1393, 13:58 عصر
سلام.
به جای C# اگر از VC++.NET استفاده کنید راحتترید.
میتونید استفاده از کلاسهای .NET و همون طراحی VISUAL رو داشته باشید به علاوه INCLUDE کردن HEADER های C++ و کدهای UNMANAGED.

afi_program
پنج شنبه 28 فروردین 1393, 00:18 صبح
از همه دوستان متشکرم که زحمت کشیدن.
آقای شهریاری این پیشنهاد شما را چند جای دیگه هم دیدم ولی متاسفانه نمیدونم چطور میشه کد c++ را به dll تبدیل کرد.

nrm man خیلی ممنون از راهنماییتون. تنها دلیلم طراحی GUI هست. اینهایی که گفتی آشنایی ندارم باهاشون اگر بتونم سعی میکنم بررسی کنم ببینم چطورن.

آقای صفا من در محیط visual studio و visual c++ کدم رو نوشتم (c++) ولی چون پروژه ای که ساختم winapp نیست از امکانات گرافیکی نمیتونم استفاده کنم و در حالت winapp هم نمیدونم چطور میشه از دستورات c++ استفاده کرد.


یه چیز دیگه اینکه ترجیح میدم رابط گرافیکی از برنامه اصلی مجزا باشه که در صورت نیاز به تغییرات در هر کدام نیاز به تغیر کل برنامه نباشه. به همین دلیل هم گفتم سی شارپ چون هم باش یه آشنایی سطحی دارم هم اینکه بالاخره یه برنامه کاملا مجزا میشه.
از اینکه خیلی سوالات ناشیانه میپرسم و خیلی مبتدی هستم عذر میخوام ولی خوب بالاخره باید تلاش کرد تا یاد گرفت :D

موفق باشید

afi_program
سه شنبه 24 تیر 1393, 00:34 صبح
سلام.
دوستان کسی نیست یکم سطح پایین تر توضیح بده
من خیلی گیج شدم.یه روش کامل اگه بگین خیلی خیلی ممنون میشم
با تشکر
موفق باشید

abbas.oveissi
سه شنبه 24 تیر 1393, 00:43 صبح
سلام.
دوستان کسی نیست یکم سطح پایین تر توضیح بده
من خیلی گیج شدم.یه روش کامل اگه بگین خیلی خیلی ممنون میشم
با تشکر
موفق باشید
دوست عزیز باید با C Plus Plus یدونه DLL بسازی بعد از توی سی شارپ توابع اون رو فراخوانی بکنید.ساخت DLL توی سی پلاس پلاس هم سخت نیست،توی ویژوال استدیو برو پروژه سی پلاس پلاس Win32 بساز و بزن که DLL میخوای.یکمم تحقیق کنی اینکه ساختارش چی باشه و چطور فراخوانی باید بکنی هم پیدا میکنید.

abbas.oveissi
سه شنبه 24 تیر 1393, 00:58 صبح
اینم یک نمونه کد که قبلا توی همین فروم برای فرد دیگه ای گذاشته بودم،اینم لینک اون تاپیک : http://barnamenevis.org/showthread.php?279141-%D9%86%D8%AD%D9%88%D9%87-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%A8%D8%A7-%D8%B3%DB%8C-%D9%BE%D9%84%D8%A7%D8%B3-%D9%BE%D9%84%D8%A7%D8%B3&p=1934664#post1934664

afi_program
چهارشنبه 25 تیر 1393, 18:41 عصر
خیلی ممنونم دوست عزیز.
کد شما و همچنین تاپیکی گذاشته بودید دیدم.
من از msdn یه مثال پیدا کردم و اجرا کردم همونطوری که گفته بود و انجام شد ولی اون مثال هم dll و هم کد بعدی هردو win32 کنسول بود. بعد خودم یه VC++ ویندوز فرم اینجاد کردم ولی نتونستم فراخوانی ها رو انجام بدم.
یه پروژه c# هم ساختم ولی نمیذاشت اون dll که قبلا ساخته بودم بهش اضافه کنم!!! پیغام خطاش میگفت یا اجازه دسترسی بهش ندارید یا اینکه از نوع com نیست!!!! اینو دیگه نفهمیدم چیکارش کنم.
اگه کمک کنید ممنون میشم

abbas.oveissi
چهارشنبه 25 تیر 1393, 19:07 عصر
خیلی ممنونم دوست عزیز.
کد شما و همچنین تاپیکی گذاشته بودید دیدم.
من از msdn یه مثال پیدا کردم و اجرا کردم همونطوری که گفته بود و انجام شد ولی اون مثال هم dll و هم کد بعدی هردو win32 کنسول بود. بعد خودم یه VC++‎ ویندوز فرم اینجاد کردم ولی نتونستم فراخوانی ها رو انجام بدم.
یه پروژه C#‎ هم ساختم ولی نمیذاشت اون dll که قبلا ساخته بودم بهش اضافه کنم!!! پیغام خطاش میگفت یا اجازه دسترسی بهش ندارید یا اینکه از نوع com نیست!!!! اینو دیگه نفهمیدم چیکارش کنم.
اگه کمک کنید ممنون میشم
به پروژه نباید اضافه اش بکنید،باید با استفاده از DllImport توی برنامه ازش استفاده کنید.

afi_program
چهارشنبه 25 تیر 1393, 23:54 عصر
dllimport کردم ولی بازم نشد.
من توی فایل dll که دارم namespace و کلاس و اینا تعریف شده. تو این حالت چجوری باید فراخوانی کنم؟ چون به روشی که شما انجام دادید وقتی انجام میدم نمیشه و میگه که اون تابع مورد نظر توی فایل dll یافت نشد!!!
ببخشید که سوالای عجیب میپرسم.
بازم ممنون از وقتی که میزارید

afi_program
پنج شنبه 26 تیر 1393, 01:32 صبح
میدونم توقع سنگین و نادرستیه. ولی اگه بتونید لطف کنید و کدی که ضمیمه کردم بررسی کنید و بگید مشکل از کجاس ممنون میشم

abbas.oveissi
پنج شنبه 26 تیر 1393, 02:02 صبح
من خودم بلد نیستم که چه جوری اگر namespace و یک کلاس کامل داریم میشه ازش توی #C استفاده کنم.توی اینترنت گشتم لینک های مختلفی پیدا کردم مثل http://www.cplusplus.com/forum/general/63428 و http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL و این http://stackoverflow.com/questions/4723730/how-to-import-and-use-a-unmanaged-c-class-from-c
مثل اینکه بهترین راهش اینه که یک wrapper با Cpp/CLI برای اون native Cpp درست کنید بعد میتونید از اون کلاس استفاده کنید.