PDA

View Full Version : تبديل كدهاي C#‎‎.net به ++C



greenhorn
چهارشنبه 26 خرداد 1389, 20:18 عصر
با سلام همانطور كه از اسم من پيداست، يك برنامه نويس تازه كار هستم (در واقع ناشي).من برنامه نويسي را با C#‎.net شروع كردم و هنوز هم فقط همين را بلدم.راستش در يك پروژه به مشكلي عجيب برخوردم.من چند فايل DLL بايد مينوشتم. خوب خيلي ساده بود و نوشتم. ولي مشكل همينجا شروع شد. بعد از تست فايلها ديدم كه با نرم افزاري كه برايش اين كتابخانه ها را نوشتم، سازگار نيستند.تماس گرفتم و علت را پرسيدم. گفتند كه بايد كدها Native باشند.حالا ميخوام از دوستان و اساتيد سايت كمك بگيرم.من ميتونم كدهايي كه نوشتم را در اختيار شما قرا بدم. اگر ممكنه دوستان اينها را براي من تبديل كنند (ترجيحا به ++C باشه خيلي گويا بهتره چون برنامه اصلي هم به همون زبان هست) پيشاپيش از ناشيگري خودم عذرخواهي و در مقابل از لطف شما تشكر ميكنم.

greenhorn
چهارشنبه 26 خرداد 1389, 21:10 عصر
اين پروژه اول هست.اين ساده ترين بخش هست.همانطور كه ميدونيد، GUID يك رشته 32 كاراكتري است كه تمامي حروف آن بطور تصادفي از بين اعداد و حروف انگليسي انتخاب ميشوند.اين كد تعدادي از آنها را برميگرداند. مثلا ده كاركتر اول را بصورت يك رشته برميگرداند (تعداد كاركترها ورودي تابع است).

sia_2007
چهارشنبه 26 خرداد 1389, 21:18 عصر
من تو سایت مایکروسافت - MSDN ؛
قسمتی رو دیدم که هم اجرای کدهای ++C رو تو #C و بالعکس رو فراهم میکنه.
بدک نبود.
مشکل کارت این جا این بوده که کد رو بد فراخونی کردی.

greenhorn
چهارشنبه 26 خرداد 1389, 21:28 عصر
مشکل کارت این جا این بوده که کد رو بد فراخونی کردی.
نه دوست من. مشكلي از بدفراخواني كردن تابع نيست. لطفا زود قضاوت نكنيد. درسته كه من گفتم تازه كارم ولي اونقدر تازه كار نيستم كه نتونم يك تابع را فراخواني كنم. من با شركت سازنده تماس گرفتم. اين يكي از نقايص نرم افزار اونهاست كه نميتونه همه انواع فايلهاي DLL را پشتيباني كنه.همانطور كه ميدونيد، وقتي كد را با زبان C#‎‎ بنويسيد و كامپايل كنيد، به شما كدي با فرمت MSIL ميده و همين مشكل ايجاد كرده


من تو سایت مایکروسافت - MSDN ؛
قسمتی رو دیدم که هم اجرای کدهای ++C رو تو C#‎ و بالعکس رو فراهم میکنه.
بدک نبود.
اين مطلب شما كمك بزرگي به من ميكنه. اگر لطف كنيد و لينك اين مطلب را قرار بديد خيلي ممنون ميشم

مهدی رحیم زاده
پنج شنبه 27 خرداد 1389, 08:26 صبح
سوال : آیا اونا هم از .net استفاده کردن؟

greenhorn
پنج شنبه 27 خرداد 1389, 13:40 عصر
سوال : آیا اونا هم از .net استفاده کردن؟

من دقيق نميدونم ولي فكر ميكنم اونها هم از دات نت استفاده كرده باشند. تا جايي كه ميدونم كامپايلر ++Visual C در محيط دات نت ميتونه كدهاي Native توليد كنه. ولي تا جايي كه من فهميدم، همه زبانها غير از #C ميتونند اين كار را بكنند. من هم از شانس بد رفتم زباني را ياد گرفتم كه حالا موقع استفاده به دردم نميخوره. هرچند واقعا زبان #C قوي و فوق العاده است و من خيلي هم به ساختار اين زبان علاقه پيدا كردم ولي راستش از اينكه به كارم نميآد خيلي نااميد شدم.

greenhorn
پنج شنبه 27 خرداد 1389, 14:17 عصر
من چند روز پيش قطعه كدي ديدم كه بنظرم اومد ممكنه حتي در زبان C#‎ هم كدهاي محلي توليد كرد. اين كار را با قرار دادن كلمه كليدي unsafe static class قبل از نام كلاس انجام داده بودند ولي داخل كد با اين روشي كه ما هميشه كد مينويسيم فرق داشت. مثلا قبل از تمام كلمات كليدي علامت # گذاشته شده بود. مثلا if# و براي بستن شرط هم از endif# استفاده شده بود. اين ممكنه؟ يا من در C#‎ هم از اونكه فكر ميكنم تازه كار تر هستم.

مهدی رحیم زاده
پنج شنبه 27 خرداد 1389, 17:01 عصر
ببین دوست من اگه اونا هم از .NET استفاده کرده باشن ، فرقی نمی کنه که شما از کدوم زبان .NET استفاده کنی.
چون زیان های دات نت همه نهایتا به یک زیان ترجمه میشن .
و اما در مورد DLL باید بگم که بنده با #C نوشتن و توی چند تا زبان دیگه هم ازش استفاده کردم بدون هیچ مشکلی .
پس احتمالا این دوستان توی برنامه خودشون از .NET استفاده نکردن .
میشه Error هایی رو که داده رو بزارید اینجا ؟

greenhorn
پنج شنبه 27 خرداد 1389, 18:07 عصر
... بنده با C#‎ نوشتن و توی چند تا زبان دیگه هم ازش استفاده کردم بدون هیچ مشکلی.
خيلي عاليه! اگر بشه توي يك تاپيك جديد اينو به من و بقيه كساني كه ممكنه براشون جالب باشه هم آموزش بديد، خيلي سپاسگذار شما خواهيم بود (و يا اگر قبلا در انجمن موجود هست به ما لينك بديد).


پس احتمالا این دوستان توی برنامه خودشون از .NET استفاده نکردن.
بله! ممكنه همينطور باشه. من هم مطمئن نيستم. من حدس زدم شايد اينطور باشه ولي مطمئن نيستم.
اگر مايل باشيد ميتونم سايت سازنده برنامه را معرفي كنم. هر چند بررسي اون حوصله ميخواد و نياز داره به يادگيري زبان اسكريپت نويسي بنام MQL كه مخصوص همين نرم افزار هست.


میشه Error هایی رو که داده رو بزارید اینجا ؟
هيچ اروري نميده! در تماسي كه باهاشون گرفتيم، اينو گفتند كه بايد با زبان ديگري كه كد محلي(Native) توليد ميكنه بنويسيم. فقط همين!

greenhorn
پنج شنبه 27 خرداد 1389, 20:30 عصر
من در سايت يك شركت نرم افزاري، محصولي را ديدم كه مدعي هستند كدهاي نوشته شده به C#‎.net را به كدهاي ++C تبديل ميكنه.
http://www.tangiblesoftwaresolutions.com/Product_Details/Instant_CPlusPlus_CSharp_Edition.html
من اين نرم افزار را دانلود كردم. ولي حتي ساده ترين كدها را وقتي تبديل ميكنيد، در زمان كامپايل ايراد ميگيره

greenhorn
جمعه 28 خرداد 1389, 03:05 صبح
خوب! بالاخره من تونستم مشكل را به طور كامل پيدا كنم.
ببينيد دوستان همانطور كه ميدانيد وقتي ما يك فايل DLL در يك زبان شيء گرا مثل C#‎‎‎‎‎ توليد ميكنيم، اولين چيزي كه تعريف ميكنيم فضاهاي نام و كلاسها هستند.
در مرحله بعد ما متغيرها، توابع و... را داخل آن تعريف ميكنيم.
روش فراخواني هم بدين ترتيب است كه ابتدا فضاي نام را صدا ميزنيم، بعد از كلاس يك نمونه ميگيريم و سپس تابع را فراخواني ميكنيم.
در اين زبان اسكريپتي، روش فراخواني تابع به اين شكل است:

"import "FileName.dll#
(...,FunctionName(Argument1,Argument2
import#
همانطور كه ديديد، پس از تعيين نام فايل هيچ نمونه سازي از كلاس يا حتي نامي از فضاي نام برده نميشود.
لذا ما بايد فايلي داشته باشيم كه فقط داراي يكسري توابع باشد.
براي زبان ++C در محيط ويژوال استوديو اين امكان فراهم است كه بتوان پروژه هايي از نوع Win32 Projects نوشت.

greenhorn
جمعه 28 خرداد 1389, 18:06 عصر
من امروز تونستم چيزهاي جديدي ياد بگيرم.
اگر فايلهاي DLL از نوع C++‎ / Win32 Project باشند، به احتمال خيلي زياد قابل فراخواني خواهند بود.
از دوستان خواهش ميكنم اگر ممكنه پروژه بسيار ساده اي را كه ارسال كردم و فقط يك خط كد داره را به اين زبان بازنويسي كنند تا امتحان كنيم كار ميكنه يا نه.