PDA

View Full Version : ارور



amir_civil
شنبه 26 آذر 1384, 14:23 عصر
سلام دوستان
من یه برنامه با بورلند سی ++ نوشتم و موقع اجرا روی بقیه سیستمها این ارور رو میده

mfc71.dll not found
باید چیکار کنم
چه جوری میشه دی ال ال به برنامم اضافه کنم

sh_roohani
شنبه 26 آذر 1384, 14:46 عصر
با بورلند C نوشتین، اونوقت mfc71.dll رو می خواد :متعجب: ؟

amir_civil
شنبه 26 آذر 1384, 15:29 عصر
سلام
بله
خوب منم توهمینش موندم
خیلی عجیبه

sh_roohani
شنبه 26 آذر 1384, 16:38 عصر
احتمالا از یه ActiveX یا هر ماجول دیگه ای استفاده نکردین که قبلا با MFC 7 لینک شده باشه؟

amir_civil
شنبه 26 آذر 1384, 17:35 عصر
سلام
میشه بیشتر توضیح بدین
من با یه سری دستورات هندل کردن و اجرای فایل و این چنین دستورهای کار کردم تو برنامم
حالا چه جوری میتونم دی ال ال مربوط رو به برنامم اضافه کنم تا دیگه ارور نده
ممنون
(البته من این برنامه رو قبلا با وی سی 7 کامپایل کرده بودم ولی حالا که با بورلند ابن کارومیکنم ارور میده)

sh_roohani
شنبه 26 آذر 1384, 17:46 عصر
ببینین، اولا دقیقا شما از کدوم محیط بورلند استفاده می کنین؟ C++ Builder؟ ثانیا خوب dll های MFC 7.1 طبیعتا چیزیه که به طور پیش فرض حتی روی Windows XP هم نباید باشه. بنابراین خوب معلومه که پیغام خطا می ده. شما یه بار به صورت استاتیک با MFC لینک کنین، ببینین بازم همون پیغام رو می ده؟
اینکه می پرسم از کدوم محیط بورلند استفاده می کنین، علتش اینه که شنیدم که C++ Builder می تونه پروژه های MFC رو هم کامپایل کنه.

amir_civil
شنبه 26 آذر 1384, 21:12 عصر
سلام
من هم با بورلند سی ++ کامپایل کردم و هم با وی سی دات نت
در هر دو صورت ارور میده
موندم چیکارش کنم

sh_roohani
یک شنبه 27 آذر 1384, 10:34 صبح
ببینین، البته جسارت نباشه. ولی مگه شما نمی گین بردینش روی یه کامپیوتر دیگه به جز اونی که کامپایل کردین؟ خوب سیستم عامل اون چیه؟ حتما این mfc71.dll رو نداره که این پیغام رو می ده دیگه. با هر نسخه ای که کامپایل کردین (منظورم debug یا release و ANSI یا UNICODE هست) dll مربوط به اون نسخه رو کپی کنین روی کامپیوتر جدید ببینین بازم همین اشکال پیش میاد.

amir_civil
یک شنبه 27 آذر 1384, 12:52 عصر
سلام
حالا من چه جوری میتونم این دی ال ال رو بزارم تو خود فایل اجرایی

sh_roohani
یک شنبه 27 آذر 1384, 13:06 عصر
عزیزم dll رو که توی فایل اجرایی نمی ذارن. اگه بخواین می تونین با تغییر تنظیمات پروژه تون، اونو به صورت استاتیک با MFC لینک کنین. توی Visual C++ 6.0:

Project >> Settings >> General >> Microsoft Foundation Classes >> Use MFC in a Static Library
توی Visual Studio .Net:

Project >> Properties >> General >> Use of MFC >> Use MFC in a Static Library
اما اینم بگم، این کار فایل اجرایی رو خیلی حجیم می کنه. کتابخونه های MFC بزرگ هستن. بهتره یا dll ها رو دستی کپی کنین، یا اگه می خواین اصولی تر عمل کنین، برای برنامه تون یه Installer بسازین.

amir_civil
یک شنبه 27 آذر 1384, 13:37 عصر
سلام
ممنون
ولی برنامه من که mfcنیست :ناراحت:
برنامه من کنسول هست
(البته اگه بگین چه جوری میتونم واسه فورم برنامه بنویسم بیشتر کارم را میوفته منظورم اینه که مثل برنامه کنسول با اجرای برنامه برنامه اجرا بشه) مثل Form_Load() در وی بی
ممنون

sh_roohani
یک شنبه 27 آذر 1384, 14:18 عصر
دو تا نکته:
1. برنامه های کنسول هم می تونن از MFC پشتیبانی کنن. اگه هنگام ایجاد پروژه چک مربوطه رو علامت بزنین، یا در حین توسعه پروژه header های مربوطه رو به اون اضافه کنین، خوب طبیعیه که پشتیبانی MFC به پروژه کنسول شما اضافه می شه.
2. متوجه منظورتون از برنامه نوشتن واسه فورم نشدم. اگه منظورتون استفاده از Windows Forms هست، که شرمنده، چون من از Net. اصلا سر در نمیارم. اگه چیز دیگه ای هست، لطفا یه کمی واضح تر بفرمایین، در خدمتتون هستم.

amir_civil
یک شنبه 27 آذر 1384, 14:28 عصر
سلام
خوب من در هنگام ایجاد پروژه هم atl و هم mfcرو علامت زدم ولی....باز اررور میده
چه جوری من header های مربوطه mfcروبه برنامه کنسولم اضافه کنم،

sh_roohani
یک شنبه 27 آذر 1384, 14:37 عصر
همین کافیه، الان MFC به پروژه شما اضافه شده و علت اینکه روی یه کامپیوتر دیگه می گه mfc71.dll نیست هم همینه. دیگه Header ها هم خودشون اضافه شدن. الان دیگه همه چی درسته. اصلا اگه به dll گیر نمی داد یه اشکالی وجود داشت. حالا که گیر می ده کافیه همونطور که گفتم یا استاتیک لینک کنین، یا dll رو کپی کنین و دیگه مشکل حله.

amir_civil
یک شنبه 27 آذر 1384, 15:57 عصر
سلام
من دیگه دارم قاط میزنم
حالا این ارور رو میده: MFC initialization failed

sh_roohani
یک شنبه 27 آذر 1384, 15:59 عصر
ای بابا! جون بیل گیتز مسیر این پروژه رو از اول بگو (دقیقا) شاید اصلا اشکال چیز دیگه ای باشه.

amir_civil
یک شنبه 27 آذر 1384, 16:52 عصر
سلام
یه برنامه کنسول از قسمت win32
در قسمت Application Settings گزینه هایmfc,atlتیک خورده اند
برنامه بدون ایراد کامپایل میشه
و موقع اجرا تو سیستم های دیگه یکی از 3 ارور زیر رو میده:

mfc71.dll not found

MFC initialization failed

this applicational has faied to start :عصبانی: :عصبانی: ;کلی اعصابم رو خورد کرده :افسرده:

sh_roohani
یک شنبه 27 آذر 1384, 17:50 عصر
راستش نمی دونم چی بگم :ناراحت: .

seyedof
یک شنبه 27 آذر 1384, 19:23 عصر
سلام
اگه برنامه کنسول است دیگه MFC میخواهید چکار؟ تیک MFC و ATL رو بردارید. اگر هم MFC میخواد به صورت استاتیک استفاده کنید تا dll نخواد.
ممنون علی

sh_roohani
یک شنبه 27 آذر 1384, 19:27 عصر
سلام،
آخه تعجب برانگیز اینه که MFC Initialization Failed می ده. وگرنه من حتی بدون Installer با کپی dll های MFC تونستم برنامه های کنسولی با پشتیبانی MFC رو روی کامپیوترای دیگه اجرا کنم.

amir_civil
یک شنبه 27 آذر 1384, 20:10 عصر
سلام

اگه برنامه کنسول است دیگه MFC میخواهید چکار؟ تیک MFC و ATL رو بردارید

خوب منم همینو میگم دیگه ولی با این ارور ها میخایی چیکار کنی

C++Lover
یک شنبه 27 آذر 1384, 23:46 عصر
دوست عزیز این دیگه اینقدر درد سر و کش دادن نداره.
اصلا برای برنامه کنسول کافیه که یه کد پرتابل ++C رو با یه ادیتور ساده مثل Notepad یا Edit تو یه فایل وارد کنی بعدش هم با یک دستور خط فرمان هر کامپایلری توی هر سیستم عاملی کامپایلش کنید و اجراش کنید.
به خدا قصد توهین یا اظهار فضل نداشتم.
اما به نظر من مشکل از این ویزاردها و IDE هاست که ما رو یه کم تنبل می کنه باعث می شه نفهمیم پشت صحنه چی میگذره بعدش هم توی همچین شرایطی گیر می کنیم.

در مورد اون MFC initialization failed هم یه نگاهی به تابع AfxWinInit تو MSDN بنداز.
اگه به MFC احتیاج نداری تو project settings استفاده از MFC رو غیر فعال کن و هدر فایلهاش رو هم از تو کدت حذف کن. مطمئن باش در این صورت دیگه اون error ها رو نمی ده.
اگه پروژه ات بزرگه و می خوای از MFC استفاده کنی بهتره از Dynamic Link to MFC استفاده کنی که این باعث می شه فایل اجراییت به dll های MFC برای اجرا احتیاج داشته باشه که در اینصورت باید اون DLL ها رو با برنامه ات redistribute کنی می تونی لیست dll هایی که فایلت برای اجرا احتیاج داره رو بوسیله dependencyWalker که یه برنامه از platform sdk است بدست بیاری.
اما اگه یه فایل اجرایی کوچیکه می تونی به صورت Static از MFC استفاده کنی.

در مورد form که فرمودید اصولا ما چیزی به نام form به معنای واقعی تو ++native vc نداریم. اگه منظورتون فرمهای .Net هست که هیچی اما می تونید تو MFC از کلاس CDialog و یک Dialog template استفاده کنید برنامه مبتنی بر فرم بنویسید. به این صورت که تو تابع InitInstance از کلاس گرفته شده از CWinApp برنامه تون یک instance از کلاس CDialog می سازید سپس تابع DoModal از شئی CDialog تون رو فراخوانی می کنید.
موفق باشید.

amir_civil
دوشنبه 28 آذر 1384, 10:08 صبح
سلام
ممنون.اگه میشه در مورد CDialog کمی بیشتر توضیح بدین ممنون میشم :لبخندساده

C++Lover
سه شنبه 29 آذر 1384, 02:44 صبح
دوست عزیز به شما پیشنهاد می کنم کتاب Programing windows نوشته Charles Petzold و بعد از آن کتاب Programing Windows with MFC نوشته jeff prosise رو حتما برای برنامه نویسی ++native VC مطالعه کنید.
من تنها می توانم در این پست اطلاعات اندکی آن هم فقط در مورد خود کلاس CDialog و نه Dialog Template و Dialog Manager به شما بدهم.
کلاس CDialog فقط یک لایه شئی گرا بر فراز Dialog Manager است. و تا وقتی که شما از Dialog Manager اطلاعاتی نداشته باشید به سختی می توانید از آن استفاده کنید. MFC یک سری توابع و داده های مورد نیاز دیالوگ رو بصورت یک کلاس انتزاعی در آورده و به عنوان CDialog معرفی کرده است. کمترین چیزهایی که برای ساختن یک Modal Dialog احتیاج دارید اینست که یک شئی نمونه از کلاس CDialog ساخته و در constructor آی دی Dialog Template را داده و سپس DoModal را از شئی CDialog فراخوانی کنید.

یک نمونه کد که به IDE خاصی احتیاج ندارد برای شما می گذارم می توانید این کد را در یک ادیتور متن وارد کرده و سپس با دستورهای خط فرمانی که در پایین نوشته ام آن را کامپایل و اجرا کنید. البته توصیه نمی کنم که حتما این کار را بکنید می توانید کد را مستقیما در VS وارد کرده و اجرا کنید در مورد Dialog template هم بهتره از Dialog editor ا Visual Studio استفاده کنید.



// tst.cpp
#include <afxwin.h>
#include "resource.h"

class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
CDialog dlg(IDD_HELLODLG);
dlg.DoModal();
return CWinApp::InitInstance();
}
} theApp;



فایل resource که شامل dialog template می باشد.


// tst.rc
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_HELLODLG DIALOGEX 0, 0, 169, 57
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,60,36,50,14
LTEXT "Hello world...",IDC_STATIC,62,15,44,8
END





// resource.h
#define IDD_HELLODLG 101


دستورات خط فرمان


cl tst.cpp /c
rc tst.rc
link tst.obj tst.res /SUBSYSTEM:WINDOWS

ضمنا برای اجرای دو دستور فوق باید کامپایلر ++VC در مسیر جاری موجود باشد.

موفق باشید.

amir_civil
سه شنبه 29 آذر 1384, 08:03 صبح
سلام
ممنون