جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'msvc'.
4 نتیجه پیدا شد
-
با سلام من DLLای دارم که با یک برنامه Win32 داده هایی را ردو بدل می کند لذا هنگام load شدن چک میکند تا اگر آن APPWin32 در حال اجرا نباشد آنرا از طریق دستور زیر اجرا کند. std::string cmd = "start APPWin32.exe"; system (cmd.c_str()); حال اگر برنامه APPWin32 بطور جداگانه اجرا شود. هر چند بار که آن DLL برای اجرا load شوند امکان مشکلی پیش مشاهده نمی شود. حتی اتمام کار آنها. حال فرض کنیم APWin32 در حال اجرا نباشد. وقتی DLL اول load میشود چون APPWin32 در حال اجرا نیست آنرا با روش گفته شده در با لا اجرا میکند و ادامه کار ... در ادامه وقتی DLL های بعدی load می شوند چون از قبل AppWin32 در حال اجرا بوده اقدام به اجرای آن نمیکنند و ادامه کار صورت میگیرد. وقتی dllهای دوم به بعد کارشان خاتمه پیدا میکند و از حافظه خارج میشوند مشکلی در ادامه حتی load شدن dllهای جدید نمیشود. حال اگر dll اول کارش خاتمه یابد و از حافظه خارج شود. دیگر dll ها نمیتوانند کارشان را به دستی انجام دهند حتی صفحه ui آنها به اصطلاح frezz میکنند و حتی اجازه Load شدن به Dll جدید داده نشده و آن هم Frezz می شود. برنامه را با VS2017 نوشته ام و روی Windows 10 مشکلی نیست ولی اگر آنرا روی Windows XP اجرا کنیم این مشکل مشاهده می شود "در VS2017 نوع SDK را نسخه 7.0 و Platform Toolset را Windows XP (v141_xp) تنظیم کرده ام ". بنظر شما مشکل چیست؟ لازم به ذکر است در حالتی که سیستم frezz شده آن APPWin32 را از حافظه خارج کنم برنامه ها از حالت frezz خارج می شوند!
-
به نام خدا با سلام خدمت دوستان گرامی. از آنجایی که کامپایل هر کتابخانه مرتبط با زبان C++ در ویندوز نکات و فوت و فن خاص خود را دارد لذا تصمیم بر آن شد تا در اینجا به نحوه کامپایل کتابخانه Curl در این سیستم عامل بپردازیم. مشخصات کلی کامپایلر و کتابخانه به شرح زیر میباشد: Curl: 7.68.0 Microsoft Build Tools: 15.9.18 Compiler and OS Architectures: x64 ابتدا به این سایت رفته و کد منبع Curl را دریافت نمایید، دقت کنید که باینری کتابخانه Curl برای ویندوز موجود است ولی با کامپایلر MinGW برای ویندوز کامپایل شده که مطلوب ما نمیباشد. به دلیل اعلام نویسندگان Curl در رابطه با نگهداری ضعیف در پشتیبانی از CMake لذا به شکل مستقیم از کنسول مایکروسافت و Makefile سازگار با آن یعنی Makefile.vc استفاده خواهد شد. پس از دریافت و استخراج محتویات، میبایست کنسولx64 Native Tools Command Prompt for VS 2017 را باز کرده و دستورات زیر را مطابق شکل در آن وارد میکنیم: F: cd F:\curl-7.68.0\winbuild که دستور اول برای تغییر درایور و دستور دوم نشانی محل استخراج کتابخانه Curl روی سیستم نگارنده مطلب میباشد. سپس دستور زیر را وارد میکنیم: nmake /f Makefile.vc mode=dll که در دستور بالا /f مشخص کننده نشانی makefileمورد نظر و modeمشخص کننده نحوه کامپایل کتابخانه به شکل ایستا یا پویا را شامل میشود که در اینجا کتابخانه به شکل پویا کامپایل میشود. چنانچه مایل باشیم کتابخانه به شکل ایستا کامپایل شود میبایست دستور زیر را وارد کنیم: nmake /f Makefile.vc mode=static پس از ورود دستور بالا کتابخانه در مسیر F:\curl-7.68.0\ پوشهای با نام buildsساخته و فایلهای حاصل از کامپایل را در آن ذخیره میکند که در تصویر زیر نتیجه نهایی کامپایل آورده شده است. حال یک پروژه ساده از نوع Plain C++ Application در Qt Creator به منظور آزمایش کامپایل صحیح کتابخانه Curl ایجاد میکنیم. قطعه کد زیر را در فایل main.cpp وارد میکنیم: #include <curl\curl.h> int main() { CURL *curl; curl = curl_easy_init(); curl_easy_cleanup(curl); return 0; } و درنهایت در فایل CMake پروژه دستورات زیر را وارد میکنیم: cmake_minimum_required(VERSION 3.5) project(Curl LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(Curl main.cpp) target_include_directories(Curl PRIVATE "F:/curl-7.68.0/builds/libcurl-vc-x64-release-dll-ipv6-sspi-winssl/include") target_link_libraries(Curl PRIVATE "F:/curl-7.68.0/builds/libcurl-vc-x64-release-dll-ipv6-sspi-winssl/lib/libcurl.lib") در گام آخر نیاز است تا فایل dll حاصل از کامپایل کتابخانه را در کنار فایل اجرایی پروژه قرار داده تا برنامه بدون مشکل اجرا شود این فایل در شاخه bin واقع در پوشه builds محل کامپایل کتابخانه موجود میباشد. چنانچه کتابخانه را به شکل ایستا کامپایل کرده باشیم نیاز است تا ماکرو CURL_STATICLIB را قبل از ورود هرگونه فایل سرآیند کتابخانه Curl مطابق زیر تعریف کنیم: #define CURL_STATICLIB متن کامل کد با رعایت نکته گفته شده چنین میباشد: #define CURL_STATICLIB #include <curl\curl.h> int main() { CURL *curl; curl = curl_easy_init(); curl_easy_cleanup(curl); return 0; } چنانچه مشکل یا ایرادی در نوشته بالا ملاحظه نمودید، نگارنده مطلب را بی خبر نگذارید. سپاس فراوان.
-
به نام خدا در این مطلب قصد داریم تا طریقه پیکربندی پایگاه داده MySQL را با استفاده از کامپایلر مایکروسافت بر روی سیستم عامل ویندوز، بررسی نماییم. در ابتدا میبایست پایگاه داده MySQL را بر روی سیستم خود نصب نماییم. بدین منظور به آدرس این آدرس رفته و سپس و نصاب آنلاین یا آفلاین آن را دریافت و بر روی سیستم خود نصب مینماییم. حال لازم است تا مسیر qmake مربوط به کیت مورد نظر واقع در محل نصب کتابخانه کیوت به متغیر محیطی Path سیستم عامل معرفی شود. در اینجا قصد داریم تا از MSVC 2017 64 bit استفاده کنیم که بر روی سیستم عامل 64 بیتی اجرا شده و خروجی دودویی برای سیستم عامل 64 بیتی تولید میکند. مطابق شکل زیر مسیر qmake مورد نظر را به Path سیستم عامل اضافه میکنیم: پس از این کار از منوی Start پوشه Visual Studio 2017 را انتخاب کرده و سپس x64 Native Tools Command Prompt for VS 2017 را انتخاب کرده تا کنسول باز شود. حال میبایست به آدرس محل درایور پایگاه داده کیوت برویم. بدین منظور دستور زیر را در کنسول وارد میکنیم: C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools>F: F:\>cd F:\Softwares\Qt\5.13.1\Src\qtbase\src\plugins\sqldrivers دستور اول به منظور تغییر درایو از C به F وارد شده و دستور دوم آدرس محل نصب کیوت روی سیستم نگارنده مطلب میباشد. حال دستور زیر را وارد میکنیم: qmake -- MYSQL_INCDIR="C:\Program Files\MySQL\MySQL Server 8.0\include" MYSQL_LIBDIR="C:\Program Files\MySQL\MySQL Server 8.0\lib" فراخوانی دستور qmake سبب ایجاد یک makefile شده که بعدا برای کامپایل درایور MySQL استفاده میشود. آدرسهای بالا نیز محل نصب پایگاه داده MySQL در حالت پیشفرض را نشان میدهد. پس از اتمام عملیات نتیجه زیر میبایست حاصل شود: ملاحظه میشود که در مقابل MySql کلمه yes نوشته شده که این به معنی موفقیت آمیز بودن یافتن درایور MySQL میباشد. در نهایت با دستور زیر عملیات کامپایل آغاز میشود: nmake sub-mysql پس از اتمام این مرحله نیز در پایان دستور زیر را اجرا کرده تا فایلهای کامپایل شده، نصب شوند: nmake install محل نصب این فایلهای راه انداز درایور در مسیر زیر میباشد: F:\Softwares\Qt\5.13.1\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers در مسیر بالا دو فایل به نامهای qsqlmysql.dll و qsqlmysqld.dll وجود دارد که باید در کنار فایل اجرایی برنامه کامپایل شده قرار گیرد تا برنامه به درستی اجرا شود. همچنین در مسیر: C:\Program Files\MySQL\MySQL Server 8.0\lib فایل libmysql.dll وجود دارد که میبایست در مسیر فایل اجرایی برنامه قرار گیرد. در پایان نوبت به این رسیده تا با ایجاد یک پروژه آزمایشی در Qt Creator بررسی کنیم تا همه چیز به درستی پیکربندی شده باشد. قبل از آن میبایست یک پایگاه داده آزمایشی در MySQL ایجاد کرده و سپس با استفاده از کتابخانه کیوت به آن متصل شویم. ابتدا خط فرمان MySQL را باز کرده و دستور زیر را وارد میکنیم: CREATE DATABASE mydatabase; که mydatabase نام پایگاه داده ایجاد شده میباشد. حال پس از ایجاد یک پروژه ساده در Qt Creator محتویات فایل .pro را مطابق شکل زیر وارد میکنیم: QT += core sql TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle SOURCES += \ main.cpp و در فایل main.cpp خواهیم داشت: #include <iostream> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlError> #include <QDebug> using namespace std; int main() { QSqlDatabase db {QSqlDatabase::addDatabase ("QMYSQL")}; db.setHostName ("localhost"); db.setDatabaseName("mydatabase"); db.setUserName ("root"); db.setPassword ("123456789"); if(db.open ()) { qDebug() << "Success!"; } else { qDebug() << db.lastError ().text (); } } با ساخت و اجرا پروژه باید پیام Success! در خروجی نمایش داده شود. این یعنی پایگاه داده MySQL با موفقیت نصب و پیکربندی شده است.
-
سلام، آیا ممکن هست در مورد منطق، ساختار و اساس کاریِ کامپایلر و همچنین تعامل آن با سیستم عامل (پلتفرمهای) مختلف توضیحاتی ارائه دهید؟ با سپاس.