تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 13

نام تاپيک: سوال برای نوشتن کلاس در c++ / clr

  1. #1
    داره خودمونی میشه امیر احمدی ن's Avatar
    تاريخ عضويت
    Jun 2013
    پست ها
    42

    پيش فرض سوال برای نوشتن کلاس در c++ / clr

    سلام

    من یک برنامه کنسول که با توابع مولتی مدیا ویندوز کار داشتم با c++ نوشتم .. میدونم که برای استفاده از این کدها c++ در در c.# فقط 2 راه بیشتر نیست

    یک تولید یک dll و استفاده از اون در c.# و
    یا با استفاده از c++/clr

    راه اول خیلی تابلو بازی میشه که یک dll همیشه باید با فایل اجرایی باشه البته به نظر خودم ..ساده ترین راه هست چون انجامش دادم..
    اما راه دوم این راه خیلی باحال میشه چون میشه مستقیم استفاده کنم اما درست نمی دونم که چطور باید کد رو برای استفاده قرار داد..

    توضیح مشکلم این که :

    1-آیا باید با کد های معمولی و رایج C++ کلاس clr رو پر کنم یا زبانش فرق میکنه چون زبان واسط هست؟؟
    2- این کلاسو چطور باید استفاده کنم یعنی به فرض این که کلاس رو کامل نوشتم ; فقط به پروژه ی سی شارپم اضافه کنم و از اون داخل برنامه استفاده کنم یا نه مراحل دیگه داره؟؟

    ممنونم میشیم که این c++/clr رو برام روشن کنید..
    Last edited by امیر احمدی ن; 22-01-2014 at 03:51.

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    کلاس و شی گرایی و حلقه و... که مشکلی ندارد، فوقش کمی تفاوت سینتکس وجود دارد.
    می ماند توابع API ویندوز که یا باید تابع مشابه اش را در دات نت پیدا کنید (WinForm یا WpfApp که از نظر مولتی مدیا امکانات بیشتری دارد) یا آنها را به شیوه مورد قبول #C در آن وارد کنید.

    مثلاً گرچه دات نت تابع MessageBox دارد ولی اگر بخواهیم صرفاً بعنوان یک نمونه ساده این تابع را از user32.dll وارد کنیم میتوانیم کدی مانند این بنویسیم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    پس همه چیز بستگی به کدی دارد که قصد تبدیل آن را دارید.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  4. #3
    داره خودمونی میشه امیر احمدی ن's Avatar
    تاريخ عضويت
    Jun 2013
    پست ها
    42

    پيش فرض

    ممنونم از اینکه جواب دادید..

    راستش کار من با جویستیک هست اون هم باز یا باید از xinput استفاده کرد یا از همون توابع ویندوز یا اینکه از dirctinput دایرکت 9 استفاده کرد (sdk)
    کلا هر چی داخل نت گشتم ببینم که چیزی برای استفاده از جویستیک همراه یا بودن شوکر داخل .net پیدا کنم نبود که نبود..

    فایل های سر امد که به برنامه c++ اینا هست:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  5. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    برای کار با joystick میتوانید از توابع DirectX.DirectInput یا XNA استفاده کنید.
    گرچه XNA دیگر تولید نمیشود ولی dll های آن همچنان قابل استفاده هستند.

    از جمله مثال بسیار زیبای زیر که اگر دزست یادم مانده باشد خودم هم امتحانش کردم و جالب بود:
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    اگر جستجو کنید در مثال های زیادی خواهید یافت.
    من فرصت مطالعه نداشتم ولی حتماً SharpDX و MonoGame هم کامپونت هایی برای این منظور دارند.

    در نهایت برای استفاده از MMSYSTEM.h هم میتوانید به همان شیوه گفته شده توابع WinMM.dll را داخل #C وارد (import) کنید و از آنها استفاده کنید.

  6. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  7. #5
    داره خودمونی میشه امیر احمدی ن's Avatar
    تاريخ عضويت
    Jun 2013
    پست ها
    42

    پيش فرض

    XNA هم مشکل xinput رو برام داره یعنی این که باید یک فریم ورک برای این ساختمان ایکس باکس بصب بشه و نیاز به dll داره و دوم هم اینکه با دسته های معمولی سازگار نیست..

    برنامه خیلی جالبیه(همونی که مدت هاست سعی در ساختش میکنم) اما امکان نصب xna رو روی سیستمم فعلا ندارم و امکان استفاده دسته های معمولی رو نداره ..

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

    در نهایت برای استفاده از MMSYSTEM.h هم میتوانید به همان شیوه گفته شده توابع WinMM.dll را داخل #C وارد (import) کنید و از آنها استفاده کنید.
    یعنی این که مثل توابع api ;در c.# این ها رو فراخونی و استفاده کنم و دیگه نیازی به c++ نیست ; دست متوجه شدم ؟؟ یا اینکه باید کلاس رو با c++ بنویستم و برای اینکه بشه از;کلاس نوسته شده استفاده کرد باید api ها رو در c.# قرار بدم؟

  8. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    مطلب اول:
    از شانس فقط دسترسی به یک دسته XBox دارم و نمیتوانم امتحان کنم ولی میتوانید روی دسته های دیگر امتحانی بکنید، چون بظاهر توابع استفاده شده کلی هستند.

    مطلب دوم:
    در مورد نیاز شما نصب XNA را میتوان کمی تغییر داد!
    به عنوان نمونه فایل زیر به راحتی و بدون نصب کار خواهد کرد 32 بیتی یا 64 بیتی ...
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    مطلب سوم:
    یعنی این که مثل توابع api در #C این ها رو فراخونی و استفاده کنم و دیگه نیازی به c++ نیست ; دست متوجه شدم ؟؟
    بله منظورم همین بود.

  9. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  10. #7
    داره خودمونی میشه امیر احمدی ن's Avatar
    تاريخ عضويت
    Jun 2013
    پست ها
    42

    پيش فرض

    ممنونم بابت راهنمایی مفیدتون و برنامه ی جالبتون
    از شانس فقط دسترسی به یک دسته XBox دارم و نمیتوانم امتحان کنم ولی میتوانید روی دسته های دیگر امتحانی بکنید، چون بظاهر توابع استفاده شده کلی هستند.
    نه متاسفانه دسته های معمولی رو نمیشه من با دسته دابل و دسته شوکر و جوی استیک معملی تست گرفتم نشد .
    در نهایت برای استفاده از MMSYSTEM.h هم میتوانید به همان شیوه گفته شده توابع WinMM.dll را داخل #C وارد (import) کنید و از آنها استفاده کنید.
    خیلی ممنون چون مشکلم رو همین حل کرد البته از سایت pinvoke.net هم استفاده کردم ..

    در مجموع من یک dll رو با vc++ 2005 کامپایل کردم و براحتی هم در win xp 7 8 32 , 64 بیت هم در vb.net 2012 .و هم c#.net 2012 استفاده کردم و خروجی هاش کاملا جالب بود به نظرم این روش ساده ترین و سازگار ترین و سریع ترین روش هست فقط باید قید ویبره رو زد البته میشه برای وببره هم از xinput هم استفاده کرد که اون هم در یک برنامه جدا امتحان کردم و ترکیبی از یایین دو کاملا جواب داد و نکته ای که هست باید با استفاده از xinput9_1_0.dll , و یا نرم تبدیل xbox360se اون رو استفاده کرد به هر حال روش جالبی نیست اما روش اول ساده تر عمومی تر قابل استفاده خواهد بود نمونه برنامم پایین میزام من رو خوشحال میکنید اگر روی دسته ی xbox تون تستش کنید ببیند جواب میده یا نه چون من دسته xbox ندارم.

    دانلود : [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  11. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ... روی دسته ی xbox تون تستش کنید ببیند جواب میده یا نه ...
    بله کار میکند، فقط چپ و راست اهرم آنالوگ راست شناسایی و نشان داده نمیشود.
    یعنی در Xbox دو اهرم چهارجهته آنالوگی و دو دکمه فشاری آنالوگی وجود دارد ... ...
    هرطوری حساب کنیم حداقل بجای چهارعدد آنالوگی پایین باید پنج عدد باشد، یعنی یک اهرم هندلر نشده.

  12. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  13. #9
    داره خودمونی میشه امیر احمدی ن's Avatar
    تاريخ عضويت
    Jun 2013
    پست ها
    42

    پيش فرض

    سلام

    خیلی از این خوشحالم که برای xbox هم جواب میده از این که حسابی وقتون رو گرفتم واقعا معذرت میخوام

    دسته های معمولی شوکر دار یک دکمه آنالوگ دارند که در صورت فشروده شدن از دو اهرم پایین آنالوگ میشه و قادیر لقمه ای رو (تیکه تیکه) بر میگردونه در غیر این صورت اهرم سمت چپ فقط 3 مقدار رو بر میگردونه 1- 0 1 که همون جهت هستند(یعنی دیگه لقمه ای نیست) و اهرم سمت راست هم کلید های y b x a میشه.

    البته این برنامه رو برای دو دسته هم زمان نوشتم که بشه تستش کرد که متاسفاته در هر ویندوز مغادیری که به عنوان مرکز بعد از فشرده شدن دکمه آنالوگ(فعال شدن دکمه آنالوک برای استفاده از اهرم های ) در میاد متفاوت هست هم چنین اصلا استانداری بین دسته ها وجود نداره که اعداد یکسان باشند فعلا اون دو قسمت بالا فقط روی ویندوز 7 64 بیت و فقط هم برای دسته ها من جواب میدنند مثلا اگر دسته هام رو روی ویندوز 8 با این برنامه تست کنم بازم فشرده شدن دکمه انالوگ یا mode رو تشخیص نمیده که فعلا منصرفش شدم تا بعد چون چیز نسبت به عموم بودن و مورد استفاده تمام دسته ها بودن از اویت بالا تری برخورداره بعد به اون قسمتم میرسم

    [من چون تا حالا توی عمرم یک دسته xbox رو از نزدیک ندیدم یکم برام تصورش مشکله] اگر امکانش هست براتون داخل تصویر بالا مشخص کنید که کدوم قسمتش در نظر نگرفتم و یا در دسته های xbox تشخیص داده نمیشه و هندل نمیشه.
    Last edited by امیر احمدی ن; 05-03-2014 at 20:26.

  14. #10
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    ... اصلا استانداری بین دسته ها وجود نداره که اعداد یکسان باشند ...
    این مورد خیلی مهم نیست!!!
    برنامه شما میتوانید یک فرم تنظیمات داشته باشد و به کاربرش اجازه دهد خود او دکه های مورد نیاز برنامه را به دکمه های دسته بازی اش نگاشت کند...

    ... اگر دسته هام رو روی ویندوز 8 با این برنامه تست کنم بازم فشرده شدن دکمه انالوگ یا mode رو تشخیص نمیده ...
    صرفاً جهت اطلاع من از Win8.1 x64 استفاده میکنم و برنامه شما به خوبی روی xbox کار کرد.
    تمام دکمه ها و اهرم ها (بجز یک اهرم) به درستی شناسایی شد و برنامه به آن واکنش نشان داد.

    ... داخل تصویر بالا مشخص کنید که کدوم قسمتش در نظر نگرفتم ...
    دسته xbox مطابق تصویر در مجموعه 14 دکمه فشاری دو وضعیته (1 یا 0) دارد.
    x,y,b,a,back,start,left bumper,right bumper
    و چهار دکمه جهت مربوط به directional pad
    و دو دکمه فشاری با فشار عمودی روی left stick,right stick
    (مانند دکمه وسط ماوس که زیر قلتک ماوس قرار دارد و با فشار عمودی کلیک میکند)


    و 6 اهرم انالوگ دارد (که به میزان کج یا فشار داده شدن عددی متناسب را میدهد و دیگگر دو وضعیت خشک 1 یا 0 ندارد)
    چهار عدد آنالوگی مربوط به دو محور عمودی و افقی left stick,right stick

    و یک عدد مربوط به دو left trigger, right trigger
    که معکوس هم کار میکنند یعنی یکی عدد را افزایش میدهد و دیگری عدد را کاهش میدهد.
    به عنوان نمونه این دو دکمه بدرد گاز و ترمز میخورد که گرچه دو اهرم آنالوگی هستند و میزان فشار بر آنها هم مهم است ولی در نرم افزار در غالب یک عدد بروز میکنند.

    مشکل کوچک برنامه شما ان است که 4 عدد آنالوگی را گذارش میکند در حالیکه 5 عدد وجود دارد.
    برنامه شما حرکت راست و چپ اهرم right stick را کشف نمیکند و متوجه نمیشود!
    بجز این مورد بقیه دکمه ها و اهرم ها به درستی کشف و نشان داده میشوند.


    ضمناً دکمه ای مانند mode هم در xbox وجود ندارد.
    و دکمه وسطی xbox guide button هم مربوط به شناسایی سیگنال و برقراری ارتباط بیسیم بین فرستنده و گیرنده بیسیم است.
    موفق باشید.

  15. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •