رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

پرچمداران

  1. سید عمید قائم مقامی

    سید عمید قائم مقامی

    کاربـــر عـــــادی


    • امتیاز

      1

    • تعداد ارسال ها

      10


  2. کامبیز اسدزاده

    کامبیز اسدزاده

    بنیـــان گذار


    • امتیاز

      1

    • تعداد ارسال ها

      505



مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز در چهارشنبه, 27 تیر 1397 در همه بخش ها

  1. 1 امتیاز
    نسخه‌ی نهایی کیوت کریتور ۴.۷.۰ منتشر شد. بهبود‌های مرتبط با سی‌پلاس‌پلاس از ویژگی‌های این نسخه می‌توان به فعال سازی مُدل کلنگ به صورت پیش‌فرض اشاره کرد. این ویژگی فرایند توسعه‌ی بسیار بزرگی را در این نسخه های اخیر رقم زده است. مدل کد کلنگ می‌تواند اطلاعات خوبی را مربوط به خطا‌های شما را نمایش دهد. ویژگی یکپارچه سازی آزمایش (Test Integration) اگر مکان نمای ماوس را در ویرایشگر سی‌پلاس‌پلاس در درون تابع آزمایش قرار دید، به طور مستقیم می‌توانید یک آزمایش جدید از آن را با اجرای گزینه Test Under Cursor action را ایجاد کنید. همچنین ویژگی های بیشتری توسط Google Test برای پشتیبانی از فیلترینگ های بیتر اضافه ده است. میزبانی ویندوز در ویندوز بررسی کامپایلر های MSVC بهبود یافته است، مشکلاتی در این زمینه حل شده اند. دیگر بهبود‌ها گزینه‌ی کیت (Kit) یکی از مهم‌ترین تنظیمات در کیوت کریتور می‌باشد. بنابراین در این نسخه جایگاه آن در بالاترین بخش از تنظیمات قرار گرفته شده است که در پست قبلی نیز به آن اشاره شده است. اگر شما صفحه‌های نمایش با کیفیت بالا HiDPI در ویندوز یا لینوکس دارید، حال شما می‌توانید به راحتی نحوه‌ی مقیاس پذیری آن را انتخاب کنید. بخش نمایش سیستم فایلها تغییراتی پیدا کرده‌اند که اجازه می‌دهد فایلها و پوشه‌ها را با یکپارچگی بهتری ببینید. همچنین شما می‌توانید پوشه‌های جدیدی را به صورت مستقیم در بخش فایل سیستم ایجاد کنید. دیگر بهبود‌ها و جزئیات در زیر لیست شده اند: Qt Creator version 4.7 contains bug fixes and new features. The most important changes are listed in this document. For a complete list of changes, see the Git log for the Qt Creator sources that you can check out from the public Git repository. For example: git clone git://code.qt.io/qt-creator/qt-creator.git git log --cherry-pick --pretty=oneline origin/4.6..v4.7.0 General * Added option for enabling and disabling HiDPI scaling on Windows and Linux (QTCREATORBUG-20232) * Added `Properties` item to context menu on files (QTCREATORBUG-19588) * Added `New Search` button to search results pane (QTCREATORBUG-17870) * Added option to show only icons in mode selector (QTCREATORBUG-18845) * File System View * Added `New Folder` (QTCREATORBUG-17358) * Added `Collapse All` (QTCREATORBUG-19212) * Added option to show folders on top (QTCREATORBUG-7818) * Made synchronization of root directory with current document optional (QTCREATORBUG-19322) * Fixed that external tools did not expand variables for environment changes Editing * Made replacement with regular expression search more perl-like (`$<number>` and `$&` are supported, whereas `&` is no longer used for captures) (QTCREATORBUG-9602, QTCREATORBUG-15175) * Added `Context Help` to editor context menu (QTCREATORBUG-55) * Added previous and next buttons to bookmarks view, and polished their behavior (QTCREATORBUG-9859, QTCREATORBUG-20061) * Added support for `WordDetect` in Kate highlighting files * Fixed that extra editor windows were not restored when opening session (QTCREATORBUG-13840) * Fixed that editor could stay busy repainting annotations (QTCREATORBUG-20422) * FakeVim * Added `:<range>sor[t][!]` Help * Improved performance impact on start up All Projects * Moved kit settings to separate options category * Made it easier to abort builds by changing build button to stop button while building (QTCREATORBUG-20155) * Added project type specific warnings and errors for kits, and made them visible in `Projects` mode * Added shortcut for showing current document in project tree (QTCREATORBUG-19625) * Added global option for `Add linker library search paths to run environment` (QTCREATORBUG-20240) * Added `%{CurrentBuild:Env}` Qt Creator variable QMake Projects * Added support for `-isystem` in `QMAKE_CXXFLAGS` * Added deployment rules for devices to widget and console application wizards (QTCREATORBUG-20358) * Fixed that arguments for QMake step did not expand variables * Fixed `lupdate` and `lrelease` external tools for Qt 5.9 and later (QTCREATORBUG-19892) C++ Support * Improved resize behavior of editor tool bar (QTCREATORBUG-15218, QTCREATORBUG-19386) * Fixed auto-insertion of closing brace and semicolon after classes (QTCREATORBUG-19726) * Fixed location information of macros (QTCREATORBUG-19905) * Clang Code Model * Enabled by default * Switched to Clang 6.0 * Implemented outline pane, outline dropdown and `C++ Symbols in Current Document` locator filter * Implemented `Follow Symbol` for single translation unit * Added type highlighting for Objective-C/C++ * Added errors and warnings of current editor to Issues pane (category `Clang Code Model`) * Added highlighting style for overloaded operators (QTCREATORBUG-19659) * Added option to use `.clang-tidy` configuration file or checks string * Added default configurations for Clang-Tidy and Clazy checks * Added link to the documentation in tooltip for Clang-Tidy and Clazy diagnostics * Improved reparse performance and memory usage * Improved selecting and deselecting specific Clang-Tidy checks * Fixed slow completion in case Clang-Tidy or Clazy checks were enabled * Fixed crashes when closing documents fast * Built-in Code Model * Added support for nested namespaces (QTCREATORBUG-16774) QML Support * Updated parser to Qt 5.10, adding support for user-defined enums * Fixed that linter warning `M127` was shown as error (QTCREATORBUG-19534) * Fixed that reformatting incorrectly removed quotes (QTCREATORBUG-17455) * Fixed that `.pragma` and `.import` were removed when reformatting (QTCREATORBUG-13038) * Fixed that import completion did not offer `QtWebEngine` (QTCREATORBUG-20723) Python Support * Added stack traces in application output to Issues pane (category `Python`) Debugging * Added `Leave Debug Mode` button to toolbar * Fixed updating of memory view * Fixed issue with restoring debugger views (QTCREATORBUG-20721) * QML * Added support for nested properties (QTBUG-68474) * Fixed issue with different endianness (QTBUG-68721) * Fixed Qt namespace detection with GDB 8 (QTCREATORBUG-19620) Qt Quick Designer * Fixed crash when adding quotes to text (QTCREATORBUG-20684) * Fixed that meta data could move in source code even when no changes occurred (QTCREATORBUG-20686) Clang Static Analyzer * Renamed plugin to `ClangTools` * Replaced Clang static analyzer by tool that runs Clang-Tidy and Clazy over whole project or a subset of the project's files QML Profiler * Improved performance of timeline * Added zooming into flame graph items Version Control Systems * Git * Added `-git-show <ref>` command line parameter * Gerrit * Added warning when pushing to wrong branch (QTCREATORBUG-20062) * Fixed updating after settings change (QTCREATORBUG-20536) Image Viewer * Added option to export SVGs in multiple resolutions simultaneously Test Integration * Added `Run Test Under Cursor` to C++ editor * Added editor marks for failed test locations (QTCREATORBUG-20328) * Google Test * Added support for filters * Fixed issue with jumping to file and line of failing test (QTCREATORBUG-18725) * Qt Quick * Fixed parsing issue with non-ASCII characters (QTCREATORBUG-20105) * Fixed detection of test name (QTCREATORBUG-20642) * Fixed detection when `quick_test_main()` is used directly (QTCREATORBUG-20746) Welcome * Rather than open project do nothing when right-clicking recent projects * Open session mini menu when right-clicking sessions Platform Specific Windows * Improved parsing of MSVC error messages (QTCREATORBUG-20297) * Fixed that querying MSVC tool chains at startup could block Qt Creator * Fixed issue with writing to network drives (QTCREATORBUG-20560) * Fixed issue with Clang and Qt 5.8 and later (QTCREATORBUG-20021) * Fixed handling of Windows debug stream which could lead to freezes (QTCREATORBUG-20640) Android * Improved behavior when emulator cannot be started (QTCREATORBUG-20160) * Fixed QML debugger connection issue from macOS client (QTCREATORBUG-20730)
  2. 1 امتیاز
    در این قسمت قصد داریم تا با چند مفهوم پایه‌ای تر در سیستم عامل ویندوز آشنا شویم. در ابتدا مفهوم (VAS (Virtual address spaces را مورد بررسی قرار می‌دهیم. فضای آدرس‌های مجازی (VAS) یک مُدل برای مدیریت بهتر حافظه می‌باشد، زمانی که یک پردازنده اقدام به خواندن یا نوشنتن در یک مکان حافظه می‌کند، از یک آدرس مجازی استفاده می‌کند. به عنوان بخشی از عملیات خواندن یا نوشتن، پردازنده آدرس مجازی را به آدرس فیزیکی ترجمه می‌کند. دسترسی به حافظه از طریق یک آدرس مجازی مزایای زیر را دارد : یک برنامه می‌تواند از محدودهٔ مجاور آدرس های مجازی برای دسترسی به یک بافر حافظه بزرگ استفاده کند که در حافظه فیزیکی به یکدیگر متصل نیستند. یک برنامه می‌تواند طیفی از آدرس های مجازی برای دسترسی به بافری بزرگتر از حافظه فیزیکی موجود را مورد استفاده قرار دهد. حافظهٔ فیزیکی ( که به اندازه 4 کیلوبایت می‌باشد) را به فایل دیسک می‌فرستد. صفحات داده یا کد بین حافظهٔ فیزیکی و دیسک در صورت مورد نیاز منتقل می‌گردد (اولویت با صفحات قدیمی تر می‌باشد.که دیرتر به آنها مراجعه شده است). آدرس های مجازی مورد استفاده در فرایندهای مختلف از یکدیگر جدا شده اند. کد در یک فرآیند نمی‌تواند حافظهٔ فیزیکی را که توسط فرآیند دیگری یا سیستم عامل مورد استفاده قرار می‌گیرد تغییر دهد. محدودهٔ آدرس‌های مجازی که در فرآیند در دسترس است، فضای آدرس مجازی برای فرایند می‌باشد. هر فرایند حالت کاربر، دارای فضای آدرس مجازی خصوصی خود است. برای یک فرایند 32 بیتی، فضای آدرس مجازی معمولاً محدودهٔ 2 گیگابایتی از 0x00000000 تا 0x7FFFFFFF است. برای یک فرآیند 64 بیتی فضای آدرس مجازی محدوده 8 ترابایتی 0x00000000000 تا 0x7FFFFFFFFFF است. طیفی از آدرس‌های مجازی گاهی اوقات طیفی از حافظه‌های مجازی نامیده می‌شوند. این نمودار برخی از ویژگی های آدرس مجازی را نشان می‌دهد: این نمودار فضاهای آدرس مجازی را برای دو فرایند 64 بیتی نشان می‌دهد: Notepad.exe و MyApp.exe هر فرایند دارای فضای آدرس مجازی خود است که از 0x000'0000000 تا 0x7FF'FFFFFFFF قرار دارد. هر بلوک آبی نشان دهنده یک صفحه (به اندازه 4 کیلوبایت) از حافظه مجازی یا فیزیکی است. توجه داشته باشید که فرایند Notepad از سه صفحه پیوندی از آدرس های مجازی استفاده می‌کند، با شروع از آدرس 0x7F7'93950000. اما این سه صفحه مجاور آدرس‌های مجازی به صفحات غیر مستقیم در حافظه فیزیکی نقش می‌شود. همچنین توجه کنید که هر دو فرایند با استفاده از یک صفحه از حافظه مجازی شروع از 0x7F7'93950000 استفاده می‌کنند، اما آن صفحات مجازی به صفحات مختلف حافظه فیزیکی نقش می‌شوند. فضای کاربر و فضای سیستم: فرایند‌هایی مانند Notepad.exe و MyApp.exe در حالت کاربر اجرا می‌شوند. اجزاء اصلی سیستم‌عامل و بسیاری از درایور‌ها بیشتر در حالت کِرنل مورد استفاده قرار می‌گیرند. هر فرایندِ حالت کاربر دارای فضای آدرس خود است ، اما تمام کد‌هایی که در حالت هسته اجرا می‌گردند، یک فضای آدرس مجزا به نام فضای سیستم دارند (دارای فضای آدرس مشترک هستند) . فضای آدرس مجازی برای فرآیند کاربر حالت فعلی کاربر، user space نامیده می‌شود. در ویندوز 32 بیت، فضای آدرس مجازی موجود در دسترس 2 به توان 32 بایت (4 گیگابایت) است. معمولاً 2 گیگابایت کمتر برای فضای کاربر می‌باشد و ۲ گیگابایت بالاتر برای فضای سیستر در نظر گرفته می‌شود. در ویندوز 32 بیتی شما میتوانید گزینه ای (در هنگام بوت شدن) را مشخص کنید که بیش از 2 گیگابایت برای فضای کاربر در دسترس باشد . در نتیجه آدر مجازی کمتری در دسترس سیستم قرار می‌گیرد. شما می‌توانید حجم فضای کاربر را تا 3 گیگا بایت افزایش دهید ، در این صورت فقط 1 گیگ فضا برای سیستم باقش می‌ماند. در ویندوز های 64 بیتی مقدار فضای آدرس مجازی 2 به توان 64 بایت (16 اگزابایت) می‌باشد . اما تنها بخش کوچکی از این محدوده استفاده میگردد محدوده 8 ترابایت از 0x000'00000000 تا0x7FF'FFFFFFFF برای فضای کاربر استفاده می‌شود و بخش هایی از 248 ترابایت از 0xFFFF0800'00000000 تا 0xFFFFFFFF'FFFFFFFF برای فضای سیستم استفاده می‌گردد. کُدِ در حال اجرا در حالت کاربر دسترسی به فضای کاربر دارد، اما دسترسی به فضایِ سیستم ندارد‌. این محدودیت باعث می‌شود که کد کاربر حالت خواندن یا تغییر ساختار داده های محافظت شده سیستم عامل را نداشته باشد. کد در حالِ اجرا در حالت هسته دارای دسترسی به فضای کاربر و فضای سیستم می‌باشد. درایور‌ها (راه‌انداز‌هایی) که در حالت هسته اجرا می‌شوند باید در نوشتن یا خواندن در فضای آدرس کاربر به دلایل زیر بسیار محتاط باشد: یک برنامه یوزر مُد (حالت کاربر)، یک در خواست برای خواندن برخی از داده‌ها را به یک دستگاه می‌فرستد. این برنامه آدرس اولیه یک بافر برای دریافت داده ها را فراهم می‌کند. یک دستگاه روتینِ درایور در حالت اجرا در حالت هسته‌، عملیات خواندن را شروع می‌کند و کنترل را به تماس گیرنده خود بازمی‌گرداند سپس اینتراپت دستگاه هر نخ (ترد) را که در حال اجرا است را قطع می‌کند. در این مرحله، درایور نباید دادهها را به آدرس اولی‌ها ارسال کند که در برنامه کاربر، در قسمت اول به آن اشاره شد. این آدرس در فضای آدرس مجازی فرایند است که درخواست را آغاز کرده است، که به احتمال زیاد همانند فرایند فعلی نیست. مخازن (استخر حافظه) صفحه‌بندی شده و صفحه‌بندی نشده (Paged pool and Nonpaged pool) در فضای کاربری، تمام صفحات حافظه فیزیکی را می‌توان به عنوان یک فایل دیسک به صورت صحیح برگرداند‌. در فضای سیستم، برخی صفحات فیزیکی می‌توانند از بیین بروند و برخی نیز نمی‌توانند. فضای سیستم دارای دو منطقه برای تخصیص حافظه پویا می‌باشد : paged pool و nonpaged pool. در حالت paged pool حافظه می‌تواند به صورت فایل (در صورت نیاز) به دیسک منتقل گردد. در حالت nonpaged pool هرگز حافظه نمی‌تواند به دیسک منتقل گردد. کتابخانهٔ پیوند پویا و فایل‌های اجرایی (DLL و PE) در این قسمت کمی با ساختار فایل های اجرایی و بخصوص DLL ها آشنا می‌شویم. در خلاصه ترین حالت می‌توان گفت Dynamic link library نام کتابخانه‌هایی است که توسط برنامه ها استفاده می‌شوند و توسط مایکروسافت پیاده سازی شده ( که اغلب دارای پسوند dll می‌باشند). این فایل ها همانند ساختار فایل های exe در ویندوز دارای ساختار (PE (Portable Executable می‌باشد. این کتابخانه‌ها می‌توانند شامل کد و داده و منابع (ریسورس‌ها) باشند. یکی از مزایای فایل های dll این است که یک بار در حافظه بارگذاری می‌شود و می‌تواند توسط چندین برنامه مورد استفاده قرار گیرد (به صورت مجازی برای هر برنامه کپی می‌شود). می‌توان dll ها را در موقه نیاز در برنامه بارگذاری کرد و هر جا که دیگر مورد نیاز نبود آن را خالی (Unload) کرد. از طرفی دیگر می‌توان از آن برای استفاده از برنامه های قابل به‌روز‌رسانی نیز استفاده کرد به این صورت که می‌توان آیکن‌ها ، فونتها و کدهایی که در هسته اصلی برنامه جایگاهی ندارند را درون dll ها قرار داد و در هنگام به‌روز‌رسانی تنها این dll ها را تعویض کرد. هر فایل اجرایی جدا از کدها و دادههای خود می‌تواند اطلاعات را از خارج از خود و از dll بگیرد. در هر فایل pe بخشی از هدر فایل، شامل آدرس جدول آدرس وارد کردن (Import) می‌شود که اطلاعات موجود در آن، آدرس توابعی که از dll ها فراخوانی می‌شود را در خود نگه داری می‌کنند ( البته این آدرس ها با پایهٔ آدرس dll ترکیب می‌شوند که در تصویر دوم هم قابل مشاهده است). تصویر زیر خلاصه‌ای ار هدر فایلهایی با ساختار PE می‌باشد. در این عکس import adress table حاوی آدرس iat در برنامه می‌باشد. شکل زیر یک توضیح کلی تر و بهتر در اختیار ما می‌گذارد. در این شکل می‌توان iat را بین دو بخش کد و داده ببینید. نمونه ای از فراخوانی یکی از توابع dll ها را در زیر می‌توان مشاهده کرد. این تصویر کد اسمبلی یک برنامه می‌باشد. مثال های کاربردی: مثال اول: در مثال اول یک dll ساخته و آن را با rundll32.exe اجرا کنید. از قسمت پروژه‌ جدید (New project) در قسمت سی‌پلاس‌پلاس پروژه ای از نوع win32project بسازید. در صفحه باز شده Next را بزنید. dll را انتخاب کرده و سپس تیک Empty project را بزنید و پروژه را بسازید. سپس به پروژه خود یک فایل cpp اضافه کنید و کد‌های زیر را در آن بنویسید: //[dll01.dll] #include <windows.h> extern "C" __declspec (dllexport) void __cdecl hello() { ::MessageBox(0, L"hello world", 0, 0); } BOOL APIENTRY Dll(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } برنامه را کامپایل کنید، سپس cmd را باز کرده و دستور زیر را در آن تایپ کنید . (در آدرسی که dll قرار دارد دستور را اجرا کنید یا این که آدرس کامل dll را به آن بدهید) c:\rundll32.exe dll01.dll,hello شکل کلی استفاده از این دستور: RUNDLL32.EXE <dllname>,<entrypoint> <optional arguments> با اجرای این دستور پنجره‌ای را می‌بینید که در آن پیغام موجود در dll را چاپ می‌کند. مثال دوم: در این مثال‌، دی‌ال‌ال (dll) ای که در مثال قبل ساختید را در یک برنامه دیگر با زبان c++ ایجاد و بعد از اتمام کار، آن را آن بارگذاری کنید. کُد برنامه مورد نظر به صورت زیر خواهد بود: #include <windows.h> #include <stdio.h> typedef void(__cdecl *MYPROC)(); int main(void) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; // Get a handle to the DLL module. hinstLib = LoadLibrary(TEXT("c://dll01.dll")); // If the handle is valid, try to get the function address. if (hinstLib != NULL) { ProcAdd = (MYPROC)GetProcAddress(hinstLib, "hello"); // If the function address is valid, call the function. if (NULL != ProcAdd) { printf("dll is loaded\n"); fRunTimeLinkSuccess = TRUE; (ProcAdd)(); } // Free the DLL module. fFreeResult = FreeLibrary(hinstLib); if (fFreeResult && ProcAdd) { printf("dll is Unloaded\n"); } else if (!fFreeResult && ProcAdd) { printf("error , dll is not Unload\n"); } } // If unable to call the DLL function, use an alternative. if (!fRunTimeLinkSuccess) { printf("Message printed from executable\n"); } system("pause"); return 0; }
این صفحه از پرچمداران بر اساس منطقه زمانی تهران/GMT+03:30 می باشد
×
×
  • جدید...