مشاهده نسخه کامل
: سوال برای نوشتن کلاس در c++ / clr
امیر احمدی ن
22-01-2014, 03:47
سلام
من یک برنامه کنسول که با توابع مولتی مدیا ویندوز کار داشتم با c++ نوشتم .. میدونم که برای استفاده از این کدها c++ در در c.# فقط 2 راه بیشتر نیست
یک تولید یک dll و استفاده از اون در c.# و
یا با استفاده از c++/clr
راه اول خیلی تابلو بازی میشه که یک dll همیشه باید با فایل اجرایی باشه البته به نظر خودم ..ساده ترین راه هست چون انجامش دادم..
اما راه دوم این راه خیلی باحال میشه چون میشه مستقیم استفاده کنم اما درست نمی دونم که چطور باید کد رو برای استفاده قرار داد..
توضیح مشکلم این که :
1-آیا باید با کد های معمولی و رایج C++ کلاس clr رو پر کنم یا زبانش فرق میکنه چون زبان واسط هست؟؟
2- این کلاسو چطور باید استفاده کنم یعنی به فرض این که کلاس رو کامل نوشتم ; فقط به پروژه ی سی شارپم اضافه کنم و از اون داخل برنامه استفاده کنم یا نه مراحل دیگه داره؟؟
ممنونم میشیم که این c++/clr رو برام روشن کنید..
سلام
کلاس و شی گرایی و حلقه و... که مشکلی ندارد، فوقش کمی تفاوت سینتکس وجود دارد.
می ماند توابع API ویندوز که یا باید تابع مشابه اش را در دات نت پیدا کنید (WinForm یا WpfApp که از نظر مولتی مدیا امکانات بیشتری دارد) یا آنها را به شیوه مورد قبول #C در آن وارد کنید.
مثلاً گرچه دات نت تابع MessageBox دارد ولی اگر بخواهیم صرفاً بعنوان یک نمونه ساده این تابع را از user32.dll وارد کنیم میتوانیم کدی مانند این بنویسیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس همه چیز بستگی به کدی دارد که قصد تبدیل آن را دارید.
امیر احمدی ن
01-02-2014, 01:15
ممنونم از اینکه جواب دادید..
راستش کار من با جویستیک هست اون هم باز یا باید از xinput استفاده کرد یا از همون توابع ویندوز یا اینکه از dirctinput دایرکت 9 استفاده کرد (sdk)
کلا هر چی داخل نت گشتم ببینم که چیزی برای استفاده از جویستیک همراه یا بودن شوکر داخل .net پیدا کنم نبود که نبود..
فایل های سر امد که به برنامه c++ اینا هست:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
برای کار با joystick میتوانید از توابع DirectX.DirectInput یا XNA استفاده کنید.
گرچه XNA دیگر تولید نمیشود ولی dll های آن همچنان قابل استفاده هستند.
از جمله مثال بسیار زیبای زیر که اگر دزست یادم مانده باشد خودم هم امتحانش کردم و جالب بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر جستجو کنید در مثال های زیادی خواهید یافت.
من فرصت مطالعه نداشتم ولی حتماً SharpDX و MonoGame هم کامپونت هایی برای این منظور دارند.
در نهایت برای استفاده از MMSYSTEM.h هم میتوانید به همان شیوه گفته شده توابع WinMM.dll را داخل #C وارد (import) کنید و از آنها استفاده کنید.
امیر احمدی ن
03-02-2014, 02:12
XNA هم مشکل xinput رو برام داره یعنی این که باید یک فریم ورک برای این ساختمان ایکس باکس بصب بشه و نیاز به dll داره و دوم هم اینکه با دسته های معمولی سازگار نیست..
برنامه خیلی جالبیه(همونی که مدت هاست سعی در ساختش میکنم) اما امکان نصب xna رو روی سیستمم فعلا ندارم و امکان استفاده دسته های معمولی رو نداره ..
خیلی سعی کردم که یک چیزی مثل همون برنامه اییکه داخل کنترل پنل سیستم هست درست کنم که انگار فقط برای دسته های xbox این امکان وجود داره..
در نهایت برای استفاده از MMSYSTEM.h هم میتوانید به همان شیوه گفته شده توابع WinMM.dll را داخل #C وارد (import) کنید و از آنها استفاده کنید.
یعنی این که مثل توابع api ;در c.# این ها رو فراخونی و استفاده کنم و دیگه نیازی به c++ نیست ; دست متوجه شدم ؟؟ یا اینکه باید کلاس رو با c++ بنویستم و برای اینکه بشه از;کلاس نوسته شده استفاده کرد باید api ها رو در c.# قرار بدم؟
سلام
مطلب اول:
از شانس فقط دسترسی به یک دسته XBox دارم و نمیتوانم امتحان کنم ولی میتوانید روی دسته های دیگر امتحانی بکنید، چون بظاهر توابع استفاده شده کلی هستند.
مطلب دوم:
در مورد نیاز شما نصب XNA را میتوان کمی تغییر داد!
به عنوان نمونه فایل زیر به راحتی و بدون نصب کار خواهد کرد 32 بیتی یا 64 بیتی ...
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مطلب سوم:
یعنی این که مثل توابع api در #C این ها رو فراخونی و استفاده کنم و دیگه نیازی به c++ نیست ; دست متوجه شدم ؟؟
بله منظورم همین بود.
امیر احمدی ن
03-03-2014, 21:53
ممنونم بابت راهنمایی مفیدتون و برنامه ی جالبتون
از شانس فقط دسترسی به یک دسته 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 ندارم.
دانلود : [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
... روی دسته ی xbox تون تستش کنید ببیند جواب میده یا نه ...
بله کار میکند، فقط چپ و راست اهرم آنالوگ راست شناسایی و نشان داده نمیشود.
یعنی در Xbox دو اهرم چهارجهته آنالوگی و دو دکمه فشاری آنالوگی وجود دارد ... ...
هرطوری حساب کنیم حداقل بجای چهارعدد آنالوگی پایین باید پنج عدد باشد، یعنی یک اهرم هندلر نشده.
امیر احمدی ن
05-03-2014, 20:23
سلام
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خیلی از این خوشحالم که برای xbox هم جواب میده از این که حسابی وقتون رو گرفتم واقعا معذرت میخوام
دسته های معمولی شوکر دار یک دکمه آنالوگ دارند که در صورت فشروده شدن از دو اهرم پایین آنالوگ میشه و قادیر لقمه ای رو (تیکه تیکه) بر میگردونه در غیر این صورت اهرم سمت چپ فقط 3 مقدار رو بر میگردونه 1- 0 1 که همون جهت هستند(یعنی دیگه لقمه ای نیست) و اهرم سمت راست هم کلید های y b x a میشه.
البته این برنامه رو برای دو دسته هم زمان نوشتم که بشه تستش کرد که متاسفاته در هر ویندوز مغادیری که به عنوان مرکز بعد از فشرده شدن دکمه آنالوگ(فعال شدن دکمه آنالوک برای استفاده از اهرم های ) در میاد متفاوت هست هم چنین اصلا استانداری بین دسته ها وجود نداره که اعداد یکسان باشند فعلا اون دو قسمت بالا فقط روی ویندوز 7 64 بیت و فقط هم برای دسته ها من جواب میدنند مثلا اگر دسته هام رو روی ویندوز 8 با این برنامه تست کنم بازم فشرده شدن دکمه انالوگ یا mode رو تشخیص نمیده که فعلا منصرفش شدم تا بعد چون چیز نسبت به عموم بودن و مورد استفاده تمام دسته ها بودن از اویت بالا تری برخورداره بعد به اون قسمتم میرسم:n13:
[من چون تا حالا توی عمرم یک دسته xbox رو از نزدیک ندیدم یکم برام تصورش مشکله:n14:] اگر امکانش هست براتون داخل تصویر بالا مشخص کنید که کدوم قسمتش در نظر نگرفتم و یا در دسته های xbox تشخیص داده نمیشه و هندل نمیشه.
سلام
... اصلا استانداری بین دسته ها وجود نداره که اعداد یکسان باشند ...
این مورد خیلی مهم نیست!!!
برنامه شما میتوانید یک فرم تنظیمات داشته باشد و به کاربرش اجازه دهد خود او دکه های مورد نیاز برنامه را به دکمه های دسته بازی اش نگاشت کند...
... اگر دسته هام رو روی ویندوز 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 هم مربوط به شناسایی سیگنال و برقراری ارتباط بیسیم بین فرستنده و گیرنده بیسیم است.
موفق باشید.
امیر احمدی ن
07-03-2014, 23:09
[نمیدونم چرا انجمن این تگ هایی که بالا برای نوشتن پست ها گذاشته بود آلان غیر فعال شده و ببخشید که این پستم به این شکل در اومده.] ممنون از جواب شما خیلی از نکاتی که نمیدوستم رو آلان می دونم به خصوص اون دکمه ای که وسط دسته قرار داشته شده بود برای ارتباط بیسیم . فکر کنم متوجه شدم مشکل از کجاست 6 مقدار برای اهرم ها در mmsystem در نظر گرفته شده(همون 6 اهرمی که گفتید) با نام های که با نام های z y x u v r از هم تفکیک شده بودن برای دسته های معمولی اون دو اهرم وجود ندارد یعنی left trigger, right trigger و فقط مقادر 0 و 1 را بر میگرداند یعنی خروجی آنالوگی در دسته های معمولی در نظر گرفته نشده. برای همین در برنامه به این موارد رو توجه نکردم و با آزمون خطا به مواردی که فقط روی دسته ها معمولی جواب میداد در نظر گرفتم اصلاحاتی انجام دادم اگر امکانش هست این رو هم تست به فرماید که : 1- آیا left trigger, right trigger مقادر خودشون رو نشون میدن ؟ 2- آیا عدم شناسای اهرم در دسته رفع شده؟ [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] بازم یک دنیا از لطفتون ممنونم [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
...نمیدونم چرا انجمن این تگ هایی که بالا برای نوشتن پست ها گذاشته بود آلان غیر فعال شده... احتمال بسیاری وجود دارد که در لحظه ارسال مطلب تان javascript مرورگرتان غیر فعال بوده باشد...
آیا left trigger, right trigger مقادر خودشون رو نشون میدن ؟
البته این دو اهرم قبلاً در نسخه پیشینیکه ارائه دادید هم کار میکردند.
مشکل حرکت افقی (چپ-راست) اهرم right stick بود.
آیا عدم شناسای اهرم در دسته رفع شده؟
بله کاملاً
در حال حاضر کلیه دکمه های فشاری و اهرمی xbox توسط برنامه شما کشف و نشان داده میشوند.
البته جای نمایش آنها با برچسب های انگلیسی که شما گذاشته اید سازگار و صحیح نیست که نباید خیلی مهم باشد...
باز در جهت کمک جایگاه صحیح دکمه ها xbox را در برنامه تان به ترتیب چنین است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید.
امیر احمدی ن
13-03-2014, 20:23
یک دنیا تشکر :n11:
امید وارم که شما هم در کار ها و پروژهاتون موفق باشید انشاالله :n12:
پیشاپیشم عیدتون مبارک:n16:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.