PDA

View Full Version : گفتگو: استفاده از دو زبان VB و #C در یک برنامه



baran_mehr
سه شنبه 26 شهریور 1387, 19:47 عصر
سلام دوستان.:لبخندساده::قلب:
چطور میتونم تو یک برنامه چند تا فرم داشته باشم که با دو زبان VB و #C نوشته شده باشه؟
و چطور باید بین اونها ارتباط مناسبی برقرار کرد.:متفکر:
و آیا این کار از نظر استاندارهای برنامه نویسی اصولی هست یا نه؟
ممنون .:لبخندساده::تشویق:

esmartiz_red
سه شنبه 26 شهریور 1387, 23:34 عصر
البته من کوچگتر از اونم که بخوام نظر بدم
فکر نمی کنم کار استانداردی باشه
در ضمن چرا می خواین این کارو کنین مگه کاری که با c# می شه کرد رو با vb نمی شه یا بالعکس
البته من تو پروژه های وب دیدم که این کارو می کنن البته تو وب هم کد هر صفحه رو فقط با یه زبان می نویسن اما تا حالا تو ویندوز ندیدم این کارو بکنن
اگرم این کار شدنی باشه من که نمی دونم چه طور

Amir Oveisi
چهارشنبه 27 شهریور 1387, 01:17 صبح
مسلما این کار رو با یه کامپایلر نمیتونین انجام بدین چون در ساده ترین حالت کامپایلر #C برای syntax های VB خطا خواهد گرفت!
میتونین اون قسمت از کدهایی که میخواین به زبان VB‌باشن رو با کامپایلر VB بصورت class library کامپایل کنین و به reference های پروژه #C تون اضافه کرده و از کلاس ها و متدهاش در میان کدهای #C استفاده کنید.
البته بصورت runtime‌ میشه توسط برنامه ای که با #C‌نوشته شده کد های VB رو کامپایل کرده و اجرا کرد که البته زیاد به این سوال ارتباطی نداره.
در کل من چنین کاری که شما گفتید رو ندیدم جایی! و نیازی هم به چنین کاری نیست و در صورت نیاز میتوان از همون روشی که برای class library‌گفتم استفاده کرد.

موفق باشید
jooje

Salar Ashgi
چهارشنبه 27 شهریور 1387, 11:15 صبح
سلام ، همانطور که دوستان گفتند فکر نکنم نیاز به چنین کاری باشه !!!! وی بی کجا و

#C با فناوری دات نت کجا ؟؟؟ هر کاری که تو وی بی بشه ، چند برابر اون تو #C

ممکنه !!! حال آنکه تو #C امکاناتی هست که VB ندارد !!!!

baran_mehr
چهارشنبه 27 شهریور 1387, 12:43 عصر
سلام خدمت همه دوستان گلم
ممنون از راهنمایی های خوبتون.
منظورم این نیست که تو یک فرم از دوزبان برنامه نویسی استفاده بشه.مثلا ما یک برنامه داشته باشیم که چند تا فرم اون با VB.NET و #C باشه که بتونه باهم کار کنه.
اینو برای این پرسیدم که گاهی اوقات یک گروه برنامه نویسی میخوان با هم یک پروژه بزرگ رو انجام بدن و شاید نیاز باشه که از دو زبان استفاده بشه تا کارها سریع تر پیش بره.
میخواستم ببینم کلا چطور میشه این کار رو انجام داد.

Amir Oveisi
چهارشنبه 27 شهریور 1387, 13:27 عصر
خوب این کار دقیقا با استفاده از class library ها انجام میشه.
فرض کنید شما تو یک تیم هستید و فقط با VB .NET بلدین کار کنین، ولی بقیه تیم قراره با #C کار کنن. ولی این کار باعث نخواهد شد که شما نتونین با اون تیم کار کنید. بلکه فناوری NET.‌این امکان رو به شما میده که با بلد بودن فقط یکی از زبانهای تحت NET. بتونین با بقیه زبان ها هم کنار بیاین.
کاری که به عنوان یک عضو تم انجام میدیدن اینه که شما با VB .NET فرم هایی که میخواین رو طراحی میکنید و برنامه نویسی شو هم انجام میدین (در واقع یک برنامه کامل می نویسین) حالا اون رو بصورت class library کامپایل کرده و فایل dll (یا فایلهای) حاصل رو در اختیار تیم قرار میدین. اونا این dll ها رو به reference‌پروژه اصلی اضافه کرده و از فرم هایی که شما طراحی کردین تو یک پروژه #C‌استفاده میکنند.
این کار به این دلیل امکان پذیر است که اسمبلی های تولید شده توسط NET. (مانند فایل های Exe و dll) به زبان MSIL تبدیل میشن و این زبان بین همه زبان های تحت NET. مشترک است. به همین دلیل اصلا فرق نخواهد کرد که این کد MSIL‌موجود قبلا با VB .NET نوشته شده یا #C‌، بلکه مهم اینه که MSIL‌ باشه!
حالا نکته ای که هست اینه که شما چطور مطمئن بشید که کدهای MSIL‌تولید شده توسط VB.NET تو #C‌ حتما ساپورت میشه و مشکلی بوجود نمیاد؟ (چون مثلا #C سربارگذاری عملگر رو داره ولی VB.NET‌ نداره و ممکنه سر اینجور مسائل مشکلاتی بوجود بیاد)
برای اطمینان از این موضوع شما کلاس هایی که دارین با VB .NET‌مینویسین رو بصورت CLS-Complaint تعریف میکنید. در واقع یک Attribute‌ به کلاس هاتون اضافه میکنید که با این کار 100٪ کد MSIL‌تولید شده تو هر زبان تحت NET.‌دیگه ای ساپورت خواهد شد)

نمونه کد:

[CLS-Complaint]
class MyVBClass
{
//my VB .NET codes here
}

موفق باشید
jooje

Amir Oveisi
چهارشنبه 27 شهریور 1387, 13:30 عصر
وی بی کجا و

#C با فناوری دات نت کجا ؟؟؟

ایشون منظورشون VB .NET‌ هست دوست عزیز.

baran_mehr
چهارشنبه 27 شهریور 1387, 23:23 عصر
bermooda جان ممنون از توضیحت .
پس با این تفاسیر باید کدها رو به DLL تبدیل کنیم و بعد به رفرنس اضافه کنیم
اما یه سوال چطور باید یک فرم رو به DLL تبدیل کرد؟؟؟ من کدها رو دیدم که به DLL تبدیل می کنن اما هنوز فرم ها رو ندیدم؟

Amir Oveisi
چهارشنبه 27 شهریور 1387, 23:41 عصر
تو تنظیمات پروژه خروجی برنامه رو class library‌ انتخاب کنید و Debug‌ کنید.
http://i36.tinypic.com/28tdh5t.jpg

موفق باشید
jooje

siavashr
پنج شنبه 28 شهریور 1387, 00:03 صبح
با دورود
این لینک رو یه نگاه بندازین شاید بدرد بخوره هر چند هنوز بیرون نیامده اما بد نیست بدونید:
http://www.eweek.com/c/a/Application-Development/F-to-Join-VB-and-C-in-Microsoft-Language-Stable

موفق باشید
سیاوش

baran_mehr
پنج شنبه 28 شهریور 1387, 12:56 عصر
برمودا جان.همین کاری که گفتی رو کردم اما خطا میده.:ناراحت:

Amir Oveisi
پنج شنبه 28 شهریور 1387, 13:08 عصر
خوب ظاهرا شما خواستین debug‌ کنین (با F5) ولی این امکان نداره چون فایل dll‌قابل اجرا شدن نیست و باید Build‌کنید. برای این کار از منوی Debug‌گزینه Build solution را انتخاب کنید یا Shift+F6 رو بزنید. پس از این کار در همون فولدر bin‌ که فایل exe برنامه ایجاد میشد الان فایل dll‌پروژه قرار خواهد داشت.
(بنده اگر جایی به اشتباه گفتم debug کنید معذرت میخوام اشتباه چاپی بوده)
موفق باشید
jooje

Salar Ashgi
پنج شنبه 28 شهریور 1387, 15:55 عصر
ایشون منظورشون VB .NET‌ هست دوست عزیز.

منظور من هم VB.NET بود ، وگرنه وی بی 6 که خیلی وقته از حیطه برنامه نویسی

کاربردی و OOP خارج شده !!!:چشمک:

Amir Oveisi
پنج شنبه 28 شهریور 1387, 17:20 عصر
منظور من هم VB.NET بود
خوب پس در اینصورت باید عرض کنم که اینطور نیست و VB .NET هم مانند #C قدرتمنده! چون هر دو دارن از NET. استفاده میکنند و هر کاری که با #C میشه انجام داد با VB .NET هم میشه اونکارو انجام داد.


وی بی 6 که خیلی وقته از حیطه برنامه نویسی

کاربردی و OOP خارج شده !!!
VB6 از اول هم در حیطه OOP نبود که الان خارج شده باشه. البته از حیطه برنامه نویسی کاربردی خارج نشده و هنوز هم خیلی از برنامه نویس ها دارن با VB6 کارهای بزرگ انجام میدن!

موفق باشید
jooje

baran_mehr
پنج شنبه 28 شهریور 1387, 17:37 عصر
دستت درد نکنه داداشی.
bermooda جان این کار رو کردم و DLL ساخته شد (یعنی یک برنامه #C رو DLL کردم )
حالا چطوری باید تو VB فراخونیش کنم و از اون استفاده کنم؟؟؟؟

Amir Oveisi
پنج شنبه 28 شهریور 1387, 17:52 عصر
خوب مثل بقیه dll ها.
اول فایل dll‌ رو به Reference‌ پروژه اضافه کنید. بعد هر جا که بخواین از کلاس های موجود در اون dll استفاده کنید باید از طریق نام namespace موجود در dll به اون کلاس (ها) دسترسی پیدا کنید.
مثلا فرض کنید dll شما حاوی کلاس Form1 است و namespace‌شما هم namespace1 نام داره و شما dll‌ رو به reference پروژه جدیدتون اضافه کردین.
حالا برای نشون دادن اون فرم یه همچین کدی باید بنویسین :

namespace1.Form1 myForm = new namespace1.Form1();
myForm.Show();

البته این کد رو در یک پروژه VB هم میشه با همون کد VB نوشت ولی در اینجا من فرض کردم که پروژه م یک پروژه #C است.

موفق باشید
jooje