View Full Version : سوال: اخطار برای Microsoft Visual C++ Runtime
ravand
جمعه 10 مهر 1394, 11:36 صبح
سلام
من وقتی برنامه ای که ساختم روش کلیک میکنم این اخطار رو میده:
this application has requested the Runtime to terminate it in an unusual way .
please contact the application's support team for more information.
جستجو کردم دیدم نوشته باید کل Microsoft Visual C++ Runtime ها رو دریافت کنم و نصب کنم منم همه ی نسخه ها رو از اول تا همین 2015 را دانلود کردم و نصب کردم حجمش نزدیک 50 مگابایت بود. ولی نمیدونم چرا بازم برنامه اخطار میده؟
متشکرم.
کامبیز اسدزاده
شنبه 11 مهر 1394, 12:33 عصر
سلام
من وقتی برنامه ای که ساختم روش کلیک میکنم این اخطار رو میده:
this application has requested the Runtime to terminate it in an unusual way .
please contact the application's support team for more information.
جستجو کردم دیدم نوشته باید کل Microsoft Visual C++ Runtime ها رو دریافت کنم و نصب کنم منم همه ی نسخه ها رو از اول تا همین 2015 را دانلود کردم و نصب کردم حجمش نزدیک 50 مگابایت بود. ولی نمیدونم چرا بازم برنامه اخطار میده؟
متشکرم.
نیازی به دانلود 50 مگابایتی MSVC ندارید ! همین کارهارو میکنید که شاکی میشید از اینکه برنامه چرا شد 400 مگابایت :لبخند:
کافیه با توجه به نوع بیلد برنامتون فایل های msvcr120 و msvcp120 رو در کنار برنامه قرار بدین که در حالت Release جمعا 1.35 مگابایت هست:لبخندساده:.
ravand
شنبه 11 مهر 1394, 13:38 عصر
نیازی به دانلود 50 مگابایتی MSVC ندارید ! همین کارهارو میکنید که شاکی میشید از اینکه برنامه چرا شد 400 مگابایت :لبخند:
کافیه با توجه به نوع بیلد برنامتون فایل های msvcr120 و msvcp120 رو در کنار برنامه قرار بدین که در حالت Release جمعا 1.35 مگابایت هست:لبخندساده:.
بهتره بحث رو توی همین تاپیک ادامه بدیم. من اگه این مشکلم حل بشه عالی میشه چون توی کتاب ها من گشتم این خروجی گرفتم از برنامه رو خوب نگفته بودن.
یعنی شما می فرمایید اصلا من نیازی ندارم که برنامه ی Microsoft Visual C++ Runtime را نصب بکنم؟ برام عجیبه چون در همین سایت گفته بودن باید نصب بکنید.
والله من نمیدونم نوع
بیلد چی هست ؟ من دنبال فایل های
msvcr120 و msvcp120 گشتم ولی نمیدونم کجاست؟
اون لینک اموزشی هم که در اون تاپیک گذاشتید اصلا سر در نیاوردم.
من ساده براتون میگم که چکار کردم:
این برنامه ی ساده ای هست که من با گرفتن دکمه های ctrl B ازش خروجی گرفتم:
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QLabel label("This is a <a href=\"http://www.google.com\">link</a> to Google.");
label.setOpenExternalLinks(true);
label.setWindowTitle("تایتل");
label.show();
return app.exec();
}
یک فایل با نام مثلاً test.exe .
با توجه به توضیحات یکی از اعضا در این تالار. من امدم این فایل ها رو کنار test.exe قرار دادم و برنامه رو اجرا کردم که اجرا شد و البته حجمش 418 مگابایت شد.
libgcc_s_dw2-1.dll
libstdC++-6.dll
libwinpthread-1.dll
Qt5Cored.dll
Qt5Gui.dll
Qt5Guid.dll
Qt5Widgetsd.dll
حالا شما بگید من چه کاری انجام بدم که حجمش کمتر بشه؟
من اونقدر ناراحت بودم که میخواستم کلاً بیخیال qt بشم برم سراغ همون جاوا :لبخند:
ممنون ازتون که وقت گذاشتید میدونم هر کسی برای دیگران وقت نمیذاره.
متشکرم.
حامد مصافی
شنبه 11 مهر 1394, 15:30 عصر
Qt5Cored.dll
Qt5Gui.dll
Qt5Guid.dll
Qt5Widgetsd.dll
نسخه دیباگ ماژول core
نسخه دیباگ و ریلیز ماژول gui
نسخه دیباگ ماژول widgets
نکته اول: برنامه شما یا در حالت دیباگ کامپایل شده است یا ریلیز (البته برای عرضه به مشتری باید در مد ریلیز کامپایل کنید(. برای ارائه دیباگ باید فایلهایی که در انتهای نام آنها d دارند و برای ریلیز آنهایی که d ندارند را ارائه کنید)
نکته دوم: فایلهای پلتفرم را نیز باید ارائه کنید.
اطلاعات بیشتر (http://doc.qt.io/qt-5/windows-deployment.html)
ravand
شنبه 11 مهر 1394, 17:24 عصر
آموزشی بهتر از این ادرس سراغ ندارید؟
http://doc.qt.io/qt-5/windows-deployment.html
الان توی این خط:
cd C:\path\to\Qt
configure -static <any other options you need>
خط اول که امده فولدر qt رو مشخص کرده منظورش: F:\qt\5.5 هست؟
خط دومم گفته هر تنظیمی که شما نیاز دارید! من چمیدونم چی میگه؟ :لبخند:
حامد مصافی
شنبه 11 مهر 1394, 18:03 عصر
این قسمتی که فرمودید مربوط به کامپایل کل کیوت هست که گمان نمیکنم نیازی داشته باشید. قسمت مربوط به ارائه برنامه به مشتری و فایلهای مورد نیاز را مطالعه بفرمایید.
ravand
دوشنبه 13 مهر 1394, 15:50 عصر
من برنامه ی Dependency Walker رو باهاش کار کردم. امدم فایل testa.exe که برنامه ی ساده ای هست که ساختم. وقتی open کردم و بعد وقتی روی دکمه ی start profiling زدم این اخطار ها رو داد:
135752
خدایا پدرمان را دراورد این qt:لبخند:
کامبیز اسدزاده
دوشنبه 13 مهر 1394, 19:03 عصر
من برنامه ی Dependency Walker رو باهاش کار کردم. امدم فایل testa.exe که برنامه ی ساده ای هست که ساختم. وقتی open کردم و بعد وقتی روی دکمه ی start profiling زدم این اخطار ها رو داد:
135752
خدایا پدرمان را دراورد این qt:لبخند:
واقعا برای من سواله ! لقمه رو چرا از پشت سر میاری میزاری تو دهنت :لبخند: پروژه ای که کار کردی رو بفرست برات Deploy کنم.
ravand
دوشنبه 13 مهر 1394, 19:15 عصر
واقعا برای من سواله ! لقمه رو چرا از پشت سر میاری میزاری تو دهنت :لبخند:
پروژه ای که کار کردی رو بفرست برات Deploy کنم.
پروژه ی خاصی نیست برادر من ! آموزش نیست!
این لینک هایی که برای من می فرستید رو خودتون امتحان کردید؟ خداوکیلی من چی از اینا بفهمم؟ شما هر روز روزی چند بار این کار رو انجام میدید. مگه چقدر سخته؟ دو خط برای ما اینجا بنویسید چه کاری انجام میدید؟ این لینک ها و آموزش هایی که می فرستید همشون ناقصن.:متفکر:
کامبیز اسدزاده
دوشنبه 13 مهر 1394, 19:41 عصر
پروژه ی خاصی نیست برادر من ! آموزش نیست!
این لینک هایی که برای من می فرستید رو خودتون امتحان کردید؟ خداوکیلی من چی از اینا بفهمم؟ شما هر روز روزی چند بار این کار رو انجام میدید. مگه چقدر سخته؟ دو خط برای ما اینجا بنویسید چه کاری انجام میدید؟ این لینک ها و آموزش هایی که می فرستید همشون ناقصن.:متفکر:
تشکر ویژه میکنم از انتقاد شما.
ravand
چهارشنبه 15 مهر 1394, 08:24 صبح
این کارهایی که کردم ببینید درسته یا نه؟
اول توی ویرایشگر qt creator پروژه ای که از قبل ساخته بودم رو باز میکنم. فایل main.cpp را انتخاب میکنم. دکمه های ctrl+B را میزنم. در آدرس زیر:
F:\qt\projeha
پوشه ی build-gg-Unnamed-Debug ساخته میشه اسم پروژه هم gg هست.
بعد دکمه های ctrl+T را میزنم. و بعد چکش رو میزنم. فولدری با نام build-gg-Unnamed-Release ساخته میشه. داخل این پوشه ، پوشه ای هست با نام release که فایل gg.exe داخلش هست.
من امدم برنامه ی Dependency walker را بازش کردم. و فایل gg.exe را از آدرس زیر open کردم:
F:\qt\projeha\build-gg-Unnamed-Release\release
این فایل ها رو بهم نشون داد:
135822
البته قبلش این فایل ها در دو ادرس زیر بود:
F:\qt\5.5\mingw492_32\bin
C:\windows\system32\
که من کپی کردم و کنار فایل gg.exe در ادرس زیر کپی کردم:
F:\qt\projeha\build-gg-Unnamed-Release\release
اگه این فایل ها رو کنار gg.exe هم کپی نمیکردم بازم برنامه اجرا میشد. ولی وقتی میرم توی یه سیستم دگه توی اون سیستم پیام میده میگه این فایل dll را هم نیاز داره!
اینم بگم که حجم کل این فایل ها شد 26 مگابایت.
تمام کارهایی که کرده بودم همینا بود. برنامه ی من آزمایشه و فقط یه پنجره است. همین.
حالا دگه چه کاری باید انجام بدم؟
متشکرم.
کامبیز اسدزاده
چهارشنبه 15 مهر 1394, 11:08 صبح
ولی وقتی میرم توی یه سیستم دگه توی اون سیستم پیام میده میگه این فایل dll را هم نیاز داره!
سوال اول اینکه دقیقا کدوم فایل رو میگه نیاز داره ؟ اسم فایل dll ؟
شما از کامپایلر MinGW استفاده میکنید و با توجه به نسخه 5.5 آیا این فایل ها icudt54,icuin54,icuuc54 رو در کنار برنامه دارید ؟
ravand
چهارشنبه 15 مهر 1394, 12:23 عصر
سوال اول اینکه دقیقا کدوم فایل رو میگه نیاز داره ؟ اسم فایل dll ؟
شما از کامپایلر MinGW استفاده میکنید و با توجه به نسخه 5.5 آیا این فایل ها icudt54,icuin54,icuuc54 رو در کنار برنامه دارید ؟
فایل libwinpthread-1.dll رو میخواد دوباره اینم بهش اضافه میکنم یه چیز دیگه میخواد. ... اگه اینطوری که میشه همون 400 مگابایت!!!!
این فایل ها رو هم بهش اضافه کردم فرقی نکرد:
icudt54,icuin54,icuuc54
الان وقتی اینا رو اضافه کردم شد 52 مگابایت! خب شما گفتی که حجمش کمتر میشه که.
من از کامپایلر MinGW استفاده میکنم. و از ویرایشگر gt creator
کامبیز اسدزاده
چهارشنبه 15 مهر 1394, 12:50 عصر
فایل libwinpthread-1.dll رو میخواد دوباره اینم بهش اضافه میکنم یه چیز دیگه میخواد. ... اگه اینطوری که میشه همون 400 مگابایت!!!!
این فایل ها رو هم بهش اضافه کردم فرقی نکرد:
icudt54,icuin54,icuuc54
الان وقتی اینا رو اضافه کردم شد 52 مگابایت! خب شما گفتی که حجمش کمتر میشه که.
من از کامپایلر MinGW استفاده میکنم. و از ویرایشگر gt creator
بسیار خب ، من یک پروژه ای با کامپایلر MinGW براتون ساختم و فایل های DLL ای که باید در کنار برنامه باشه و همچنین platform اون رو قرار دادم ، لطفا دریافت و روی سیستمی که میخواهید اجراش کنید.
حد اکثر حجمش شد 18 مگابایت :لبخندساده: اینم لینک زیپ شده حدود 8 مگابایت دریافتش کنید و فایل اجرایی خودتون رو به جای این فایل اجرایی قرار بدین : http://s3.picofile.com/file/8215976226/MyProject.zip.html
(http://s3.picofile.com/file/8215976226/MyProject.zip.html)
ravand
چهارشنبه 15 مهر 1394, 13:07 عصر
بسیار خب ، من یک پروژه ای با کامپایلر MinGW براتون ساختم و فایل های DLL ای که باید در کنار برنامه باشه و همچنین platform اون رو قرار دادم ، لطفا دریافت و روی سیستمی که میخواهید اجراش کنید.
حد اکثر حجمش شد 18 مگابایت :لبخندساده: اینم لینک زیپ شده حدود 8 مگابایت دریافتش کنید و فایل اجرایی خودتون رو به جای این فایل اجرایی قرار بدین : http://s3.picofile.com/file/8215976226/MyProject.zip.html
(http://s3.picofile.com/file/8215976226/MyProject.zip.html)
ممنون ولی مهم این نیست که این برنامه ی ساده رو من حتما اجرا بکنم. مهم اینه که من بفهمم که چطوری و کدوم فایل رو باید کپی کنم؟ همین.
من برام عجیبه. توی همه ی این آموزش ها گفتن که شما باید با برنامه ی
Dependency walker فایل برنامه ی خودتون رو پیدا کنید. منم همین کار رو کردم ولی عجیب اینه که وقتی کنار فایل gg.exe قرار میدم و در سیستم دیگه تست میکنم جواب نمیده!!!
ravand
چهارشنبه 15 مهر 1394, 14:11 عصر
تونستم این برنامه ساده رو مشکلش رو حل کنم. الان این برنامه ی ساده فقط یه پنجره است.
اگه فایل های مورد نیاز رو نداشته باشه توی سیستم خودم هیچ پیغامی نمیده! ولی توی یه سیستم دگه پیغام میده.
libgcc_s_dw2-1.dll
libstdC++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
gg.exe
بعداً من پوشه ی platforms را از این آدرس کپی کردم و کنار فایل gg.exe قرار دادم:
F:\qt\5.5\mingw492_32\plugins
و فقط فایل qwindows.dll را داخل این پوشه قرار دادم.
قبلش که این پوشه ی platforms را نذاشته بودم برنامه این اخطار رو میداد:
This application failed to start because it could not find or load the Qt platform plugin "windows"
حجم کل برنامه شد: 18.9 MB
شما گفتید میشه حجمش رو کمترم کرد چطوری باید کمترش کنم؟
مشکلی که من دارم اینه که مجبورم برای اینکه بفهمم برنامه ام به چه فایلی نیاز داره ؟ برنامه ام رو ببرم توی اون سیستمم کپی کنم تا اینو بفهمم! چون روی سیستم خودم پیغام نمیده! در صورتی که قبلاً پیغام میداد.
برنامه ی Dependency walker برخی فایل ها رو شناسایی نمیکنه. مثلاً من برای یک برنامه ی برچسب به دو فایل libwinpthread-1.dll و Qt5Gui.dll نیاز داشتم که شناسایی نکرد.
راستی برنامه ام به فایل های icudt54,icuin54,icuuc54 که گفتید اصلا نیاز نداشت. و بدون اینا هم اجرا شد.
کامبیز اسدزاده
چهارشنبه 15 مهر 1394, 19:44 عصر
حجم کل برنامه شد: 18.9 MB
شما گفتید میشه حجمش رو کمترم کرد چطوری باید کمترش کنم؟
خب دوست عزیز شما بیشتر از این چه انتظاری دارید ؟ اولین بار 400 مگابایت حجم پروژه ات بود حالا شده 18 مگ.
حجم خود فایل اجرایی که چند کیلوبایت هست ! بزارید یک مقایسه انجام بدیم : من یه برنامه ساده فقط یک فرم روی C# درست میکنم دقیقا مثل همین برنامه که 18 مگابایت شد روی C++ حالا بخوام اجراش کنم روی یک سیستم دیگه :
برنامه نوشته شده در C++ همش 18.9 مگ شد همراه با کتابخانه های مورد نیاز !!!!
برنامه نوشته شده در C# فقط و فقط 236 مگابایت دات نت فریم ورکی هست که باید نصب بشه حالا با فایل اجراییش هم کاری ندارم اصلا بزاریم یک کیلوبایت !
این تفاوت خودش پاسخ سوال رو میده ، تنها مشکل این وسط اینه که کتابخانه های Qt فعلا به صورت پکیج در دسترس قرار نداره و این کار رو مشکل کرده که با کپی کردن و ساخت فایل نصبی همه چیزش حل میشه.
جالب اینجاست پروژه هایی که در C++ نوشته میشه هرچقدر هم کد بزنی و برنامت رو پیشرفته تر کنی حجم فایل اجرایی آن چنان افزایش پیدا نمیکنه مگر اینکه مستقیما فایل تصویر یا فیلم های زیادی رو درون پروژه قرار بدی.
مشکلی که من دارم اینه که مجبورم برای اینکه بفهمم برنامه ام به چه فایلی نیاز داره ؟ برنامه ام رو ببرم توی اون سیستمم کپی کنم تا اینو بفهمم! چون روی سیستم خودم پیغام نمیده! در صورتی که قبلاً پیغام میداد.
برنامه ی Dependency walker برخی فایل ها رو شناسایی نمیکنه. مثلاً من برای یک برنامه ی برچسب به دو فایل libwinpthread-1.dll و Qt5Gui.dll نیاز داشتم که شناسایی نکرد.
راستی برنامه ام به فایل های icudt54,icuin54,icuuc54 که گفتید اصلا نیاز نداشت. و بدون اینا هم اجرا شد.
روی سیستم شما پیغام نمیده چون فایل های مورد نیاز رو سیستمتون نصب هست و هنگام اجرای برنامه تحت IDE هیچ خطایی نخواهید گرفت.
من کاملا در عجبم چه نیازی هست به Dependency walker ؟ اگر این لازم بود و اگر با هر کتابخانه ای سازگار بود در سایت qt.io اسمش رو میاوردن و اونهمه راهنمایی که لینکش رو هم دادم رو در سایت قرار نمیدادند !!!
راجب فایل های icudt54,icuin54,icuuc54 چون ازشون استفاده نشده نیازی نبود.
بهترین راه حل رو برای درک مطلب : هر ماژول یا کتابخانه ای در پروژه اینکلود میکنید حتما باید در کنار برنامه داشته باشید.
مثلا : من از QML هم استفاده میکنم بنابراین باید فایل Qt5Qml رو هم داشته باشم و الی آخر...
negative60
پنج شنبه 16 مهر 1394, 04:25 صبح
حجم کل برنامه شد: 18.9 MB
شما گفتید میشه حجمش رو کمترم کرد چطوری باید کمترش کنم؟
مشکلی که من دارم اینه که مجبورم برای اینکه بفهمم برنامه ام به چه فایلی نیاز داره ؟ برنامه ام رو ببرم توی اون سیستمم کپی کنم تا اینو بفهمم! چون روی سیستم خودم پیغام نمیده! در صورتی که قبلاً پیغام میداد.
برنامه ی Dependency walker برخی فایل ها رو شناسایی نمیکنه. مثلاً من برای یک برنامه ی برچسب به دو فایل libwinpthread-1.dll و Qt5Gui.dll نیاز داشتم که شناسایی نکرد.
راستی برنامه ام به فایل های icudt54,icuin54,icuuc54 که گفتید اصلا نیاز نداشت. و بدون اینا هم اجرا شد.
اگه باز هم ميخوای حجم نهايی برنامه ات کمتر بشه ميتونی خود Qt رو به صورت استاتيک با کامپايلر MSVC کامپايک کنی که در نتيجه فايل توليد شده توسط اين کتاب خونه نياز به dll های Qt نخواهد داشت حجم نهايی هم به صورت rar شده همراه با dll های ران تايم ++C حدود 5 تا 6 MG ميشه .
ravand
پنج شنبه 16 مهر 1394, 06:11 صبح
اگه باز هم ميخوای حجم نهايی برنامه ات کمتر بشه ميتونی خود Qt رو به صورت استاتيک با کامپايلر MSVC کامپايک کنی که در نتيجه فايل توليد شده توسط اين کتاب خونه نياز به dll های Qt نخواهد داشت حجم نهايی هم به صورت rar شده همراه با dll های ران تايم ++C حدود 5 تا 6 MG ميشه .
منظور شما از کامپايلر MSVC چیه؟ چه برنامه ای رو میگید؟
من برنامه ی Microsoft Visual C++ Runtime را از سیستم مورد نظر حذف کردم بازم برنامه ام کار کرد. اگه همینطوری باشه بهتره. یعنی سیستم مورد نظر نیازی به برنامه ی اضافی مثل Microsoft Visual C++ Runtime نداشته باشه.
ravand
پنج شنبه 16 مهر 1394, 06:25 صبح
هترین راه حل رو برای درک مطلب : هر ماژول یا کتابخانه ای در پروژه اینکلود میکنید حتما باید در کنار برنامه داشته باشید.
مثلا : من از QML هم استفاده میکنم بنابراین باید فایل Qt5Qml رو هم داشته باشم و الی آخر...
الان مثلاً من اینا رو اینکلود کردم:
#include<QApplication>
#include<QLabel>
به نظرتون چطوری بفهمم که به چه فایل های dll نیازی دارم؟ لطفا اینطوری نگید که این فایل یا اون فایل رو میخواد. بگید چطوری بفهمم به این فایل ها نیاز داره؟
چون در لیست فایل های من اصلاً فایل dll که با این نام ها باشه نبود:QApplication QLabel
negative60
پنج شنبه 16 مهر 1394, 06:52 صبح
منظور شما از کامپايلر MSVC چیه؟ چه برنامه ای رو میگید؟
من برنامه ی Microsoft Visual C++ Runtime را از سیستم مورد نظر حذف کردم بازم برنامه ام کار کرد. اگه همینطوری باشه بهتره. یعنی سیستم مورد نظر نیازی به برنامه ی اضافی مثل Microsoft Visual C++ Runtime نداشته باشه.
منظور يکی از نسخه های کامپايلر Microsoft Visual C++ بود.
ببينيد نيازی به نصب Microsoft Visual C++ Runtime در کامپيوتر مشتری نيست فقط dll های msvcp و msvcr همون نسخه کامپايلر بايد کنار برنامه يا در system32 موجود باشه
ravand
پنج شنبه 16 مهر 1394, 06:57 صبح
منظور يکی از نسخه های کامپايلر Microsoft Visual C++ بود.
ببينيد نيازی به نصب Microsoft Visual C++ Runtime در کامپيوتر مشتری نيست فقط dll های msvcp و msvcr همون نسخه کامپايلر بايد کنار برنامه يا در system32 موجود باشه
اتفاقاً برنامه ی Dependency walker این فایل ها رو که در پوشه ی system32 بود رو نشونم داد:
kernel32.dll
msvcrt.dll
shell32.dll
ولی عجیبه که وقتی برنامه ی Microsoft Visual C++ Runtime را از سیستم مورد نظر پاک کردم بازم این برنامه ی من اجرا میشد! یعنی بعد از پاک کردن Microsoft Visual C++ Runtime این فایل ها از پوشه ی system32 حذف نشده؟
حامد مصافی
پنج شنبه 16 مهر 1394, 08:17 صبح
شما هم فایل libgcc_s_dw2-1.dll را ارائه کردید و هم
Microsoft Visual C++ Runtime. در حالی که کامپایلر شما یا MSVC است و یا MinGW. اگر با حذف Microsoft Visual C++ Runtime برنامه کار میکند پس احتمالا کامپایلر شما mingw است. ابتدا کامپایلر خود را بررسی کرده و سپس فقط یکی از این فایلها را ارائه کنید.
ravand
پنج شنبه 16 مهر 1394, 09:16 صبح
اگه باز هم ميخوای حجم نهايی برنامه ات کمتر بشه ميتونی خود Qt رو به صورت استاتيک با کامپايلر MSVC کامپايک کنی که در نتيجه فايل توليد شده توسط اين کتاب خونه نياز به dll های Qt نخواهد داشت حجم نهايی هم به صورت rar شده همراه با dll های ران تايم ++C حدود 5 تا 6 MG ميشه .
من نمیدونم چطوری با MSVC کامپایل میکنن.
از صحبت هاتون فهمیدم. اگه برنامه بخواد کم حجم تر از این باشه باید از برنامه ی Microsoft Visual C++ Runtime نصب باشه. و اگر برنامه ی Microsoft Visual C++ Runtime نصب نباشه همون فایل های dll را میذاریم کنار فایل gg.exe. و اگر برنامه ی Microsoft Visual C++ Runtime نصب باشه نیازی به هیچ کدوم از این فایل های dll نیست. درست فهمیدم؟
آخه من توی سیستم خودم که Microsoft Visual C++ Runtime رو نصب کردم دیدم وقتی فایل gg.exe را توی درایو دیگه و بدون فایل های dll هم وقتی اجرا میکنم اجرا میشه.
کامبیز اسدزاده
پنج شنبه 16 مهر 1394, 09:27 صبح
الان مثلاً من اینا رو اینکلود کردم:
#include<QApplication>
#include<QLabel>
به نظرتون چطوری بفهمم که به چه فایل های dll نیازی دارم؟ لطفا اینطوری نگید که این فایل یا اون فایل رو میخواد. بگید چطوری بفهمم به این فایل ها نیاز داره؟
چون در لیست فایل های من اصلاً فایل dll که با این نام ها باشه نبود:QApplication QLabel
باور کن قضیه خیلی ساده تر از چیزیه که فکرشو میکنی ! :لبخندساده: خودت داری کار رو سخت میکنی!!!! شما لطف کن یکم دقت به راهنمای کتابخانه.
بازم یک راهنمایی ساده میکنم تا روشنتر بشی.
سوالت اینه که مثلا میخوای بدونی با وارد کردن این دو تا چه فایلی رو باید در کنار برنامه داشته باشی :
#include<QApplication>
#include<QLabel>
خب در رابطه با QLabel به این لینک توجه کن : http://doc.qt.io/qt-5/qlabel.html
Header: #include <QLabel>
qmake: QT += widgets
و همچنین برای QApplication : http://doc.qt.io/qt-5/qapplication.html
در قسمت qmake مشخص کرده که داره از ماژول widgets استفاده میکنه در نتیجه شما با داشتن فایل Qt5Widgets.dll این ماژول رو در اختیار برنامه گذاشتی.
در کل وقتی شما فایل Qt5Widgets.dll رو در کنار برنامه داری میتونی از کلاس های موجود در اون استفاده کنی که در این لینک لیست اونها مشخص شده http://doc.qt.io/qt-5/qtwidgets-module.html که QApplication ای که بهش اشاره کردی در لیست قرار داره.
این لینک رو حتما ببین : http://doc.qt.io/qt-5/qtmodules.html تمامی ماژول ها و هرچی در لیستشون دارند رو مشخص کرده خیلی راحته با نگاه کردن به این بخش میتونی بفهمی چه کلاسی تحت چه ماژولی داره فراخوانی میشه.
نکته : شما در پست های قبلی اشاره کردی که خداییش از این لینک ها چی بفهمم !!! باور کن اگه به این لینک ها مراجعه نکنی باید برای هر نکته ای یه تاپیک بزنی که فکر نکنم با یکی دو تا تاپیک مشکل حل بشه توصیه من اینه حتما برای یک بار هم که شده اشتیاقی از خودت نشون بده به این توضیحاتی که در مستندات داده شده توجه کن ، چرا که من یا هرکس دیگری که اطلاعاتی در این زمینه داره فقط و فقط با مراجعه به این مستندات اطلاعات رو کسب کرده.
موفق باشید.
pswin.pooya
پنج شنبه 16 مهر 1394, 10:16 صبح
آخه من توی سیستم خودم که Microsoft Visual C++ Runtime رو نصب کردم دیدم وقتی فایل gg.exe را توی درایو دیگه و بدون فایل های dll هم وقتی اجرا میکنم اجرا میش
پیشنهاد من اینه که سطح معلومات خودتون رو در این زمینه کامپیوتر به شدت افزایش بدید. حالا از برخی از زبانهای بیسیک مثل C# بگذریم زبانهای دیگه مخصوصا و مخصوصا زبان C++ نیازمند کاربر حرفه ای هست که دانش کافی از کامپیوتر داشته باشه. حتی توی زبانهای دیگه مثل C# هم بعد یک مرحله خاص نیازمند دانش خوب کامپیوتری هستید. البته دانشی که برای برنامه نویسی با C++ نیاز خواهید داشت به مراتب بیشتر هست.
مورد دیگه آزمون و خطا هست. متاسفانه یا خوشبختانه C++ شبیه زبانهای دیگه نیست که راحت سرچ کنی و به جواب مطلوب برسی این بیشتر بخاطر اینه که برنامه نویسهای اون حرفه ای تر هستند و با مستندات ابتدایی هم راحت می تونن کارشون رو انجام بدن و لازم نیست که آموزش خاص و یا فروم خاصی براشون فراهم شه. حالا جریان Qt که واقعا ساده هست اگر بخوای وارد موارد پیچیده تر مثل صوت و گرافیک و سیستم و ... بشی که گریه ات در اومده. اینقدر باید معلومات داشته باشی که حد نداره. (خب البته زبان برنامه نویسهای حرفه ای هست و وقتی یه برنامه نویس سی پلاس پلاس راحت بالای 9 هزار دلار حقوق می گیره و یا یه برنامه نویس سی شارپ به زور می تونه به این رقم برسه. همچین انتظارهایی هم ازش میره.) پس بهتره دنبال لقمه آماده نباشی و از کسی هم انتظار آموزش حال اونکه اون آموزش کامل باشه نداشته باشی چون فرض اونا اینه که شما خیلی چیزها رو می دونید.
یه مورد خیلی ساده از همین موارد که فرض می کنن شما می دونید اینه که اگر dll رو در پوشه windows/system32 و یا پوشه های دیفالت سرچ کپی کنی خود سیستم می ره و اون رو باز می کنه و دیگه لازم نیست کنار فایل اجرایی باشه. اما برای اطمینان بیشتر بهتره که همیشه اینکار رو بکنی.
مورد دیگه اینه که اگر واقعا با حجم مورد داری. می تونی CRT رو غیر فعال کنی و از API خود سیستم عامل استفاده کنی. که حتی برنامه نویسهای نخبه هم اینکار رو نمی کنن. معمولا اینکار رو برنامه نویسهای ویروس و یا موارد مشابه انجام میدن. (به اضافه در برخی موارد خیلی خاص مثل توسعه هسته سیستم عامل).
در مورد Qt هم برنامه هایی مثل Chrome و یا Telegram و وایبر دارن ازش استفاده می کنن. در مورد C++ هم که 99 درصد برنامه های درست و حسابی باهاش نوشته شدن. مثل مایا، مکس، ویندوز، آفیس و ..... (من رو دسکتاپم به جز یکی دو تا برنامه زبان انگلیسی همه موارد دیگه با C++ نوشته شدن.
ravand
پنج شنبه 16 مهر 1394, 10:32 صبح
پیشنهاد من اینه که سطح معلومات خودتون رو در این زمینه کامپیوتر به شدت افزایش بدید. حالا از برخی از زبانهای بیسیک مثل C# بگذریم زبانهای دیگه مخصوصا و مخصوصا زبان C++ نیازمند کاربر حرفه ای هست که دانش کافی از کامپیوتر داشته باشه. حتی توی زبانهای دیگه مثل C# هم بعد یک مرحله خاص نیازمند دانش خوب کامپیوتری هستید. البته دانشی که برای برنامه نویسی با C++ نیاز خواهید داشت به مراتب بیشتر هست.
مورد دیگه آزمون و خطا هست. متاسفانه یا خوشبختانه C++ شبیه زبانهای دیگه نیست که راحت سرچ کنی و به جواب مطلوب برسی این بیشتر بخاطر اینه که برنامه نویسهای اون حرفه ای تر هستند و با مستندات ابتدایی هم راحت می تونن کارشون رو انجام بدن و لازم نیست که آموزش خاص و یا فروم خاصی براشون فراهم شه. حالا جریان Qt که واقعا ساده هست اگر بخوای وارد موارد پیچیده تر مثل صوت و گرافیک و سیستم و ... بشی که گریه ات در اومده. اینقدر باید معلومات داشته باشی که حد نداره. (خب البته زبان برنامه نویسهای حرفه ای هست و وقتی یه برنامه نویس سی پلاس پلاس راحت بالای 9 هزار دلار حقوق می گیره و یا یه برنامه نویس سی شارپ به زور می تونه به این رقم برسه. همچین انتظارهایی هم ازش میره.) پس بهتره دنبال لقمه آماده نباشی و از کسی هم انتظار آموزش حال اونکه اون آموزش کامل باشه نداشته باشی چون فرض اونا اینه که شما خیلی چیزها رو می دونید.
من منظورتون رو از سطح معلومات متوجه نمیشم مگه چه سطحی از معلومات میخواد؟
من فکر میکنم اینکه اموزش نیست فقط مختصص qt نیست خیلی از زبان ها این مشکل رو دارن. روز اولی که رفتم سراغ جاوا همین مشکل رو داشت. با node.js هم که کار میکردم همین مشکل رو داشت و الانم داره.
php هم که چند سال پیش شروع کردم همین مشکل رو داشت. آدم با تجربه کم کم این چیزا رو یاد میگیره. من دنبال این نیستم که یکی همه چی رو بذاره جلوم. ولی خب برای شروع ادم به یه اموزش نیاز داره.
من مشکلم این بود که هر چی سرچ میکردم درست توضیح نداده بودن و خلاصه یه اشاره ی کوچکی میکردن. من با جاوا هم همین مشکل رو داشتم.
ببینید جاوا رو چقدر ساده و خلاصه توضیح دادم:
http://barnamenevisi.blogsky.com/1391/01/24/post-99/
من الان این مطلب ساده رو یاد گرفتم بقیه ی مطالب رو هم راحت یاد میگیرم.
من qt رو چند سال پیش رفتم سراغش و نزدیک به 30 تا صفحه ازش مطلب یاد گرفتم. ولی متاسفانه چند نفر اطلاعات غلط بهم دادن و من از ادامه ی یادگیری منصرف شدم و رفتم سراغ جاوا.
من اینو فهمیدم برای یادگیری باید پروژه ای کار کرد. و توقع نباید داشت که یه کتاب خوب گیر بیارم. یا یه نفر حتما یادمون بده.
پروژه میگیرم و کم کم پیش میرم. من همینطوری php یاد گرفتم.
pswin.pooya
پنج شنبه 16 مهر 1394, 11:21 صبح
من منظورتون رو از سطح معلومات متوجه نمیشم مگه چه سطحی از معلومات میخواد؟
هرچقدر بیشتر بهتر. من بعد از اینهمه مدت که برنامه نویسی کردن (نزدیک 15 سال) هنوزهم دارم یاد می گیرم. شاید بعدا متوجه این حرف من بشید اما شما اگر واقعا می خوایین برنامه نویس خوب C++ باشید باید حتی در مورد ساختار پردازنده هم اطلاعات داشته باشید. به هیچ وجه این رو با زبانهایی مثل جاوا و یا php مقایسه نکنید اینها فقط سینتکسشون شبیه هم هست.
این مثال رو چندین بار توی این فروم زدم که یه قسمت از کد انجین من هست. مثلا فرض کن که می خوای تابع ساده ای مثل قدر مطلق برای اعداد اعشاری بنویسی:
float abs(float a) {
if ( a< 0) return -a;
return a;
}
اما یه برنامه نویس حرفه ای C++ ممکنه کدی مثل کد زیر رو استفاده کنه:
float absf(float a)
{
union fl_union { float val_f; int val_i; };
fl_union x ;
x.val_f = a;
x.val_i = x.val_i & 0x7FFFFFFF;
return x.val_f;
}
این کد شاید در ابتدا به نظر بیاد که کندتر از کد بالا باشه. اما برای نوشتن این کد در نظر گرفته شده که CPU پایپ لاین داره if همیشه (البته به جزء معماری ARM اونم در برخی شرایط) همیشه با دستور jump همراه هست. دستور jump می تونه باعث خالی شدن pipeline پردازنده بشه. خالی شدن پایپ لاین توی یه معماری مثل corei اینتل یعنی حداقل 22 برابر کندتر شدن پردازنده. از طرف دیگه دستور های منطقی توی همه معماری ها یک سیکل ساعت رو می گیرن اما دستور ضرب مثال اول توی برخی از معماری ها مخصوصا معماری های قدیمی می تونه 6 سیکل رو هم بگیره. توی مثال دوم من می دونستم که استانداردی که C++ برای نمایش (present) اعداد اعشاری استفاده می کنه IEEE 754 هست و توی این استاندارد بیت آخر برای نمایش علامت استفاده میشه. حالا کد بالا ظاهرش با C++ خوب نیست اما میشه از اسمبلی inline خوشگلترش کرد. همینطور باز با inline کردن خود تابع سرعت افزایش چشمگیری پیدا می کنه.
وقتی صحبت از دانش توی برنامه نویسی C++ میشه یعنی هیچ محدودیتی وجود نداره (پس نگید تا چه سطحی) و شما باید مرتب افزایشش بدی تا بهتر کد بزنی اما خب دیگه همچین مسائلی اصلا توی زبانهای دیگه مطرح نیست. یعنی کلا این قابلیت ها رو ندارن.
سوالاتی که می پرسید خیلی ابتدایی هستد و برخی از اونها خیلی ناشی گرایانه. مثلا همین مساله حجم و یا dll. و یا حتی امکانات. بدون هیچ تردیدی و بدون هیچ تردیدی حجم برنامه های C++ در کمترین حالت ممکن هستند. شاید شما متوجه نباشید اما حتی اگر با خود اسمبلی هم کد یکسانی با قابلیت یکسان رو بخوایید تولید کنید باز به همین میزان حجم برنامه می رسید. اگر ترجمه دقیق دستورها و ... رو می دونستید و یا اینکه می دونستید فریم ورک چیه هیچ وقت این بحث رو مطرح نمی کردید.
ravand
پنج شنبه 16 مهر 1394, 13:30 عصر
هرچقدر بیشتر بهتر. من بعد از اینهمه مدت که برنامه نویسی کردن (نزدیک 15 سال) هنوزهم دارم یاد می گیرم. شاید بعدا متوجه این حرف من بشید اما شما اگر واقعا می خوایین برنامه نویس خوب C++ باشید باید حتی در مورد ساختار پردازنده هم اطلاعات داشته باشید. به هیچ وجه این رو با زبانهایی مثل جاوا و یا php مقایسه نکنید اینها فقط سینتکسشون شبیه هم هست.
این مثال رو چندین بار توی این فروم زدم که یه قسمت از کد انجین من هست. مثلا فرض کن که می خوای تابع ساده ای مثل قدر مطلق برای اعداد اعشاری بنویسی:
float abs(float a) {
if ( a< 0) return -a;
return a;
}
اما یه برنامه نویس حرفه ای C++ ممکنه کدی مثل کد زیر رو استفاده کنه:
float absf(float a)
{
union fl_union { float val_f; int val_i; };
fl_union x ;
x.val_f = a;
x.val_i = x.val_i & 0x7FFFFFFF;
return x.val_f;
}
این کد شاید در ابتدا به نظر بیاد که کندتر از کد بالا باشه. اما برای نوشتن این کد در نظر گرفته شده که CPU پایپ لاین داره if همیشه (البته به جزء معماری ARM اونم در برخی شرایط) همیشه با دستور jump همراه هست. دستور jump می تونه باعث خالی شدن pipeline پردازنده بشه. خالی شدن پایپ لاین توی یه معماری مثل corei اینتل یعنی حداقل 22 برابر کندتر شدن پردازنده. از طرف دیگه دستور های منطقی توی همه معماری ها یک سیکل ساعت رو می گیرن اما دستور ضرب مثال اول توی برخی از معماری ها مخصوصا معماری های قدیمی می تونه 6 سیکل رو هم بگیره. توی مثال دوم من می دونستم که استانداردی که C++ برای نمایش (present) اعداد اعشاری استفاده می کنه IEEE 754 هست و توی این استاندارد بیت آخر برای نمایش علامت استفاده میشه. حالا کد بالا ظاهرش با C++ خوب نیست اما میشه از اسمبلی inline خوشگلترش کرد. همینطور باز با inline کردن خود تابع سرعت افزایش چشمگیری پیدا می کنه.
وقتی صحبت از دانش توی برنامه نویسی C++ میشه یعنی هیچ محدودیتی وجود نداره (پس نگید تا چه سطحی) و شما باید مرتب افزایشش بدی تا بهتر کد بزنی اما خب دیگه همچین مسائلی اصلا توی زبانهای دیگه مطرح نیست. یعنی کلا این قابلیت ها رو ندارن.
سوالاتی که می پرسید خیلی ابتدایی هستد و برخی از اونها خیلی ناشی گرایانه. مثلا همین مساله حجم و یا dll. و یا حتی امکانات. بدون هیچ تردیدی و بدون هیچ تردیدی حجم برنامه های C++ در کمترین حالت ممکن هستند. شاید شما متوجه نباشید اما حتی اگر با خود اسمبلی هم کد یکسانی با قابلیت یکسان رو بخوایید تولید کنید باز به همین میزان حجم برنامه می رسید. اگر ترجمه دقیق دستورها و ... رو می دونستید و یا اینکه می دونستید فریم ورک چیه هیچ وقت این بحث رو مطرح نمی کردید.
به نظرم شما داری خیلی سخت میگیری. ما که نمیخوایم آپالو هوا کنیم که!!
شما به جای اینکه ما رو امیدوار کنی بیشتر ناامید میکنی!
من قدر مطلق میخوام چیکار؟!
من یه برنامه ی ساده میخوام بنویسم. مثلاً مشتری میاد میگه من یه برنامه میخوام برای مدیریت اطلاعاتم. یا حساب ساده. مثلا یه مشتری داشتم میگفت میخوام یه برنامه برام بنویسی که سفارشات رو ثبت کنه حذف کنه ویرایش کنه.
بعد از پارچه عکس بگیره چاپ کنه و ...
همه ی این کارها رو میشه به سادگی کرد. من که نمیخوام مرورگر کروم بنویسیم که !
این فشار اوردن ها به cpu توی php هم هست. اگه در بحث mysql این موضوعات رو ندونی فشار زیادی به سرور میاد. باید بدونی دستورات sql رو چطوری بنویسی که این مشکلات پیش نیاد و ....
بذارید اگه از نظر شما من در توانم نیست ادامه بدم خودم تجربه کنم. من که قرار نیست تمام وقتم روبرای این کار بذارم. بهتره حداقل خودم تجربه کنم.
pswin.pooya
پنج شنبه 16 مهر 1394, 15:18 عصر
من یه برنامه ی ساده میخوام بنویسم. مثلاً مشتری میاد میگه من یه برنامه میخوام برای مدیریت اطلاعاتم. یا حساب ساده. مثلا یه مشتری داشتم میگفت میخوام یه برنامه برام بنویسی که سفارشات رو ثبت کنه حذف کنه ویرایش کنه.
بهتره که برنامه های در اون سطح رو با C++ ننویسی مگر اینکه دلیل خاصی داشته باشی. C# دقیقا برای اینجور برنامه ها ساخته شده. اصلا در موردش حتی شک هم نکن. اینجور مشتری ها پول درست و حسابی نمی دن و برنامه درست و حسابی هم نمی خوان. اگر قراره اینجور برنامه ها بنویسی بیخودی سراغ زبانهای پیچیده تر مثل C++ نرو.
این مثل این می مونه که میگی باید 1 ساعته از خونه برم سر کوچه اون موقع رفتم مثلا بلیط هواپیما گرفتم که به موقع برسم. یا میگی قراره ساک ببرم برای بردن ساکی دستیم رفتم کامیون کرایه کردم. برنامه های در اون سطح راحت می شه با C# و PHP و یا ASP حلش کرد. اگر قرار نیست از قدرت مانوری که C++ می ده استفاده کنی و اسمش رو بزاری مثلا آپولو هوا کردن چرا می خوای بری و اینهمه کارت رو پیچیده تر کنی. راحت برو سراغ سی شارپ هم کامپوننتش آماده است. هم کدش آماده است. هم آموزشش هست. هم هر سوالی داشته باشی حتی در مورد محل دکمه کامپایل می تونی روی وب پیدا کنی.
کامبیز اسدزاده
پنج شنبه 16 مهر 1394, 20:09 عصر
این مثل این می مونه که میگی باید 1 ساعته از خونه برم سر کوچه اون موقع رفتم مثلا بلیط هواپیما گرفتم که به موقع برسم. یا میگی قراره ساک ببرم برای بردن ساکی دستیم رفتم کامیون کرایه کردم. برنامه های در اون سطح راحت می شه با C# و PHP و یا ASP حلش کرد. اگر قرار نیست از قدرت مانوری که C++ می ده استفاده کنی و اسمش رو بزاری مثلا آپولو هوا کردن چرا می خوای بری و اینهمه کارت رو پیچیده تر کنی. راحت برو سراغ سی شارپ هم کامپوننتش آماده است. هم کدش آماده است. هم آموزشش هست. هم هر سوالی داشته باشی حتی در مورد محل دکمه کامپایل می تونی روی وب پیدا کنی.
:قهقهه: کشته مرده ی مثال هایی هستم که میزنی پویا :لبخند:
با اجازه تاپیک قفل شد ، چون جواب سوال خیلی وقته داده شده :خجالت:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.