نمایش نتایج 1 تا 34 از 34

نام تاپیک: نوشتن برنامه در ویندوز و اجرای ان در لینوکس

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486

    نقل قول: نوشتن برنامه در ویندوز و اجرای ان در لینوکس

    خیلی خیلی ممنون نیما جان
    معمولا شرکت ها برای اینکه کاربران بتوانند از آن استفاده کنند کتابخانه ها و هدر فایل ها را منتشر می کنند بقیه در سیستم عامل وجود دارد.
    یعنی توابع موجود در کتابخانه ها خودشون از API ها برای ارتباط با ویندوز استفاده میکنند یا اینکه توابعی که ما استفاده میکنیم خود API ها هستند. مثلا توی اون برنامه گرافیکی از توابعی مثل DrawBorder و SetCursor و ... استفاده شده بود. آیا این توابع خود API های ویندوز هستند یا اینکه توابعی از کتابخانه های ارائه شده هستند؟
    آیا میشه API ها رو به نوعی همون Interrupt ها فرض کرد؟ البته به نوعی یه level بالاتر، مثلا interrupt ها در سطح کار با ثبات های cpu دونست ولی API ها رو در سطح سیستم عامل؟
    اگه میشه از این توابع API یه تابعی چیزی مثال بزنید تا بهتر بشه فهمید.
    در عکسی که بالا قرار دادید، آیا MSIL که گفتین زبان میانی مایکروسافت هست همون CIL میشه که کد ها رو به زبان میانی ترجمه میکنه؟
    قاعدتا کامپایلر JIT هم باید در CLR باشه که کد های 0 و 1 تولید شده از CLR در تصویر بالا از همین JIT هست. آیا درسته؟
    راستی توی برنامه نویسی win32 همه چیز رو باید خود برنامه نویس بسازه؟ اینجوری که من توی اون برنامه گرافیکی متوجه شدم، حتی یه دکمه هم وجود نداره و باید پیاده سازی بشه. البته توی صحبت های شما قبلا گفته بودین که همه چیز رو باید برنامه نویس کنترل کنه و پیاده سازی کنه ولی تا این حد فکر نمیکرم دیگه :دی
    بازم ممنون بابت توضیحات خوبتون ;)

  2. #2

    نقل قول: نوشتن برنامه در ویندوز و اجرای ان در لینوکس

    بله به تمام آن توابعی که از dll های ویندوز استفاده می کنیم API می گوییم(دقیق تر windows API).
    برای یک مثال که خودتان می شناسید: تابع GetKeyboardState برای دریافت حالت کلید های کیبرد یک API هست، داخل user32.dll است و هدر آن نیز در Windows.h قرار دارد. import library آن نیز User32.lib هست که باید در کامپایر در linker تعریف شود (این مورد در VC به طور پیش فرض تعریف شده است، برای سایر موارد باید دستی اضافه کنیم)
    تابع SetCursor برای کار باموس ، یا Rectangle برای گرافیک نیز API هستند، حال در dll های مختلف مثلا در Gdi32.lib که با نام GDI شناخته می شود.
    پس نیاز به مثال مجدد نیست، همه توابعی که در آن مثالی که لینکش را گذاشتم دیدید و نمی شناختید یا در windoes.h قرار داشتند همه API بودند (یا کلا بخشی از SDK ویندوز).

    API ها را نمی توان به Interrupt تعبیر کرد، فقط یکسری توابع برای انجام کارها هست، مثلا برای پیاده سازی توابع کار با کیبرد از ++C (و شاید در صورت نیاز اسمبلی) استفاده شود برای خواندن پورت های ورودی .

    کلا حتی اگر شما یک سخت افزار بسازید و برای آن یکسری SDK یا توابعی منشر کنید که با فرخوانی آن ها بتوان با سخت افزارتان ارتباط برقرار کرد ( مثلا روی آن چیزی بنویسد، بوق بزند و ... ) در اصطلاح به آن ها API می گوییم.

    در مورد CLR هم بله درست است.
    JIT در شکل نیامده ولی کدها توسط همان JIT ترجمه می شوند

    راستی توی برنامه نویسی win32 همه چیز رو باید خود برنامه نویس بسازه؟ اینجوری که من توی اون برنامه گرافیکی متوجه شدم، حتی یه دکمه هم وجود نداره
    خیر همه چیز وجود دارد.(فراموش نکنید پایه تمامی قسمت های ویندوز win32 است)
    من برای اینکه کاربران تازه کار درگیر control های پیشرفته نشوند حرفی از آن ها نزدم و فقط محیطی برای رسم اشکال فراهم کردم.

    این مثال را ببینید(با عکس است):
    http://www.winprog.org/tutorial/controls.html

    شما مثل سایر شیوه ها و زبان های برنامه نویسی محیط visual دارید تا طراحی دیالوگ کنید، اما به راحتی آن ها یا .NET نیست. (و تعداد کنترل ها نیز به اندازه و وسعت .NET نیست)
    مثلا در win32 این طور نیست که بر روی یک button کلیک کنید تا اتوماتیک رویدادی را بسازد و راحت داخلش کد بنویسید. شما باید ID آن button را کپی کنید و سپس در بخش مربوط به پیام ها خودتان دستی بخشی برای فراخوانی آماده کنید، (یعنی ID آن را در switch-case اضافه کنید)
    در MFC این سختی کمتر شده و اتومات سازی مانند سایز زبان ها وجود دارد و کمتر نیاز به نوشتن دستی هست.

    برای خواندن یا نوشتن اطلاعات در کنترل ها نیز، با یک = نمی توانید داده ها یا رشته ها را بخوانید. باید دستی پیامی به شکل زیر بفرستید با ID همان کنترل تا در متغیر مورد نظر داده کپی شود، مثلا برای اضافه کردن رشته به listbox:

    int index = SendDlgItemMessage(hwnd, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)"Hi there!");
    زیاد تعجب نکنید، اکثر برنامه های معروف که در منزل استفاده می کنید در نسخه ویندوز خود، اگر از MFC کمک نگیرند، مستقیم از طریق همین win32 برنامه خود را نوشته اند:
    3ds max ، Photoshop ، ...

  3. #3
    کاربر دائمی آواتار fazel-d
    تاریخ عضویت
    آذر 1386
    محل زندگی
    بورکینافاسو
    پست
    399

    نقل قول: نوشتن برنامه در ویندوز و اجرای ان در لینوکس

    اصلا آیا میشه VS رو تو لینوکس run کرد؟

  4. #4

    نقل قول: نوشتن برنامه در ویندوز و اجرای ان در لینوکس

    نقل قول نوشته شده توسط fazel-d مشاهده تاپیک
    اصلا آیا میشه VS رو تو لینوکس run کرد؟
    این سوال در همین تاپیک پرسیده شد! ای کاش ابتدا مطالعه می کردید...

    خیر، ++VC مخصوص ویندوز هست.
    شما می توانید کدهای ++C/C را به صورت استاندارد بنویسید در ویندوز با VC کامپایل کنید و در لینوکس با gcc و در MAC OS با Xcode

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •