PDA

View Full Version : ریشه کن کردن سارس: چک کردن مسیرها در کامپایلرهای مختلف ++C



Anti_Evil
دوشنبه 22 دی 1382, 17:31 عصر
با سلام،

از آنجایی که تعدادی از مشکلات پرسیده شده در forum مربوط به همین عنوان میباشد، تصمیم گرفتم با نوشتن چند خط این مشکل بشریت را حل کنم.
وقتی شما شروع به نوشتن برنامه تان میکنید امکان دارد از توابع و کلاسهای کتابخانه های استاندارد ++C استفاده کنید و همانطور که میدانید برای استفاده از هر یک از این توابع نیاز داریم که ابتدا Header مورد نیاز را به برنامه اضافه کنیم.
اصولا Header File جایی است که توابع و کلاسها در آنجا معرفی میشوند و Source File ها محل implement کردن میباشد.
برای معرفی این header file ها کافی است از دستور include# استفاده کنیم.
مسیرهای کامپایلر نیز از همین جهت مهم هستند !
یعنی اگر در معرفی این مسیرها اشتباهی رخ دهد کامپایلر قادر به پیدا کردن header file ها و library file ها نمیباشد. بنابراین برنامه ساده ای نظیر برنامه پائین به مشکل بر میخورد:


#include <stdio.h>

void main()
{
printf( "We Don't Give up Shit !" );
}

خوب، ان شاالله با توضیحات ناکافی بنده مشکل را درک کرده باشید.
رفع کردن این مشکل بسیار ساده است، شاید ساده تر از کد بالا !
تنها کاری که باید انجام دهید معرفی مسیرهای جدید توسط Compiler IDE هستش.

روش معرفی مسیرها در Turbo C++ 2.0 و Borland C++ 3.1:
نکته: فرض کنید کامپایلر در مسیر C:\TC نصب شده باشد.

1- وارد محیط ++ Borland C شوید.
2- از منوی Options گزینه Directories را انتخاب کنید.
3- مسیر Include Directory به C:\TC\INCLUDE و مسیر Library Directory را به C:\TC\LIB تغییر دهید.
4- سجده شکر به جا آورید !

نکته: در مثال بالا ما فرض را بر آن گرفتیم که header file ها در شاخه ای با نام Include در Tc قرار دارند، همینطور در مورد Library file ها !


روش معرفی مسیرها در Visual C++ 6.0 مقدس:
نکته: فرض کنید کامپایلر در مسیر C:\VC6 نصب شده باشد.

1- با سلام و صلوات به روح Tom Archer وارد محیط VC++ 6.0 شوید.
2- روی منوی Tools کلیک کرده و Options را انتخاب کنید.
3- روی برگه Directories کلیک کنید.
4- مسیر Include Files را به C:\VC6\Include و Library Files را به C:\VC6\LIB تغییر دهید.
5- بعد از درود به Philip Taylor برنامه را اجرا کنید.

نکته: اصولا در کامپایلرهای پیشرفته نظیر VC++ 6.0 واقعا نیازی به چنین کارهایی نیست، مگر اضافه کردن شاخه ای جدید به کامپایلر.
نکته: روش ست کردن مسیرهای MFC و ATL گفته نشد.

روش معرفی مسیرها در Visual C++ 7.1 .Net:
زیاد فرقی با VC++ 6.0 نداره منم سرم خیلی شلوغه !!!!

موفق باشید.

areka
دوشنبه 22 دی 1382, 18:38 عصر
mamnonam az tozihat va rahnamee arzeshmand shoma ,khaili lotf kardin ,ama moshkele man hal nashode albate fekr mikonam manzoore mano motevajeh nashodin ,age eshkalii nadashte bashe man ghesmatii az barname ro befresam lotf konin ye negahii be oon bendazin ehtemalan ontor be natije ae khaham resid
chon tamamii marahelii ke shoma farmodid dorost boode ,eshkal dar oon ghesmatha nist
bazam mamnonam ke vaghteton o be man dadin

Anti_Evil
دوشنبه 22 دی 1382, 19:01 عصر
خیلی خوب،
اگر کد شما به صورت Win32 API یا MFC هستش بفرستید، در غیر این صورت متاسفم.

areka
دوشنبه 22 دی 1382, 19:12 عصر
#include<windows.h>
#include<string.h>
#include<strstrea.h>

long FAR PASCAL_exportWindowfunc(HWND hwnd,unsigned message,WORD wparam,long lParam);
char szWinName[]="MyWin";
char str[80] = "";
int PASCAL WinMain(HANDLE hThisInst,HANDLE hPrevInst,LPSTR lpszArgs,int nWinMode)
{
HWND hwnd;
MSG msg;
WNDCLASS wcl;
if(!hPrevInst){

wcl.hInstance = hThisInst;
wcl.lpszClassName = szWinName;
wcl.lpfnWndproc = Windowfunc;
wcl.style = NULL;
wcl.hIcon = loadIcon(NULL,IDI_APPLICATION);
wcl.hCursor = loadCursor(NULL,IDC_CROSS);
wcl.lpszMenuName = NULL;
wcl.cbClsExtra=0;
wcl.cbWndExtra=0;
wcl.hbrBackground=GetStockObject(LTGRAY_BRUSH);
if(!RegisterClass(&wcl))return 0;
}
hwnd = CreateWindow(szWinName,"MyWindow",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL

);

ShowWindow(hwnd,nWinMode);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
long FAR PASCAL WindowFunc(HWND hwnd,WORD message,WORD wParam,LONG lParam)
{
HDC hdc;
PAINTSTRUCT paintstruct;
ostrstream ostr(str,sizeof(str));

switch(message){
PAINTSTRUCT paintstruct;
case WM_PAINT:
hdc = Beginpaint(hwnd,&paintstruct);
Textout(hdc,1,1,str,strlen(str));
EndPaint(hwnd,&paintstruct);
break;
case WM_CHAR:
hdc = GetDC(hwnd);
Textout(hdc,1,1," ",2);
ostr<<(char)wparam<<ends;
Textout(hdc,1,1,str,strlen(str));
Release DC(hwnd,hdc);
break;
case WM_RBUTTONDOWN:
hdc = GetDC(hwnd);
ostr<<"Right Button is down."<<ends;
Textout(hdc,LOWORD(lparam),HIWORD(lparam),
str,strlen(str));
ReleaseDC(hwnd,hdc);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

//------------------------------------------------------------------------------------//



barname ro ferestadam ama enja khob neshon dade nimishe bayad align left kard ta khob neveshte ha khonde beshan ,albate ghesmatiii az barname haste ke ba borland C++ tahte windows hastesh ke khodeton kamelan motevajeh moshkele man khahid shod
mamnonam

Anti_Evil
دوشنبه 22 دی 1382, 20:02 عصر
پس از مشاهده کد شما موارد زیر به نظرم رسید.

1- شما باید کد خود را نه به صورت تکی بلکه در یک قالب Win32 API Project کامپایل کنید.

2-


long FAR PASCAL_exportWindowfunc(HWND hwnd,unsigned message,WORD wparam,long lParam);

کد خود را به صورت زیر تغییر دهید:


long FAR PASCAL _export Windowfunc(HWND hwnd,unsigned message,WORD wparam,long lParam);

من مشکل خاص دیگه ای نمیبینم، باید براحتی کامپایل بشود.
اگر همچنان مشکل داشتید لطفا error را بنویسید.

خوب نوشته بودید :wink:
موفق باشید.

Anti_Evil
یک شنبه 26 بهمن 1382, 14:28 عصر
خوب ... حالا روش خشک کردن ریشه های ایدز در VC++ 7.1
همونطور که در روشهای قبلی مشاهده کردید دیدید چقدر آسون مسیرهای کامپایلر را ست کردیم.

حالا ایندفعه میخوایم بریم سراغ VC++ 7.1:

1- از اونجایی که VC++ 7.1 جزو خانواده اشرافی و اصیلی هستش خیلی مودب وارد محیط VC++ 7.1 میشوید.
2- از منوی Tools گزینه Options را انتخاب میکنید.
3- در پنجره Options و از ستون سمت چپ روی Projects کلیک کنید و سپس روی VC++ Directories کلیک کنید.
4- مسیر جدید را معرفی و تائید کنید.
5- به صورتی که VC++ 7.1 ناراحت نشه خیلی آروم از معبد VC++ 7.1 خارج شوید.

زعفرونی باشید،
هادی