تبلیغات
C++ Developing
 
درباره وبلاگ




مدیر وبلاگ : امید صالحی
نویسندگان
آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :
C++ Developing
صفحه نخست             تماس با مدیر           پست الکترونیک               RSS                  ATOM
سه شنبه 5 مرداد 1395 :: نویسنده : امید صالحی

URL Encode

شاید برای شما اتفاق افتاده است که بخواهید محتویات یک صفحه را در وب بخوانید ولی به دلیل وجود بعضی کاراکترها در url که از آن استفاده می کنید موفق به انجام آن نشده اید.
راه حل ساده است.
فقط توسط تابع زیر url خود را encode کنید و سپس از آن استفاده کنید.
std::string urlencode(const std::string &s)
{
    static const char lookup[]= "0123456789abcdef";
    std::stringstream e;
    for(int i=0, ix=s.length(); i<ix; i++)
    {
        const char& c = s[i];
        if ( (48 <= c && c <= 57) ||//0-9
           (65 <= c && c <= 90) ||//abc...xyz
           (97 <= c && c <= 122) || //ABC...XYZ
           (c=='-' || c=='_' || c=='.' || c=='~') 
        )
        {
            e << c;
        }
        else
        {
            e << '%';
            e << lookup[ (c&0xF0)<<4 ];
            e << lookup[ (c&0x0F) ];
        }
    }
    return e.str();
}

Digits

تمام داده های موجود در حافظه از بایتها ساخته می شوند. بایتها نیز از بیتها ساخته می شوند.
بیتها کوچک ترین واحد موجود در حاقظه هستند که فقط می توانند صفر یا یک باشند.
گاهی لازم است این بیتها مستقیما دستکاری شوند.
توسط دستورات زیر این کار عملی خواهد شد.

تغییر دادن بیت مورد نظر خود در حافظه:
number : متغیر مورد نظر
x : بیت مورد نظر برای دستکاری

Setting a bit : number |= 1 << x;
Clearing a bit : number &= ~(1 << x);
Toggling a bit : number ^= 1 << x;
Checking a bit : bit = (number >> x) & 1;
Changing the nth bit to x : number ^= (-x ^ number) & (1 << n); 
Bit n will be set if x is 1, and cleared if x is 0.

مشاهده بیتها در محل ذخیره یک عدد از نوع double :
void show_double_digits(double num)
{
    char ch[100];
    _int64 number;
    memcpy(&number, &num, sizeof(num));
    for (int x = 63; x <= 0; x--)
    {
        int bit = (number << x) & 1;
        ch[x] = bit == 1 ? '1' : '0';
    }
    ch[64] = 0;
    TRACE("\nsh:%s\n", ch);
}

تغییر دادن بیتهای یک عدد از نوع double در حافظه به صورت دلخواه:
_int64 aa = 0x7FEFFFFFFFFFFFFF;
double default;
memcpy(&default, &aa, sizeof(aa));

Numeric Limits

گاهی اوقات لازم است کمترین مقدار و یا بیشترین مقدار ممکن برای ذخیره کردن در متغییر های مختلف را به دست آوریم.
توسط کدهای زیر این کار عملی خواهد شد.

// numeric_limits example
#include <limits>       // std::numeric_limits
cout<<"Minimum value for int: "<<std::numeric_limits<int> ::min()<<'\n';
cout<<"Maximum value for int: "<<std::numeric_limits<int> ::max()<<'\n';
cout<<"int is signed: "<<std::numeric_limits<int> ::is_signed<<'\n';
cout<<"Non-sign bits in int: "<<std::numeric_limits<int> ::digits<<'\n';
cout<<"int has infinity: "<<std::numeric_limits<int> ::has_infinity<<'\n';

Command

در محیط کامند ویندوز می توان توسط تایپ دستورات خود اعمال زیادی را انجام داد. همچنین بعضی اعمال در ویندوز فقط از طریق کامند قابل اجرا هستند.
توسط قطعه کد زیر می توان کامند خود را به این تابع داده و همچنین در صورت وجود خروجی کامند خود را هم مشاهده کرد.

string cmd_command(char*msg)
{
    char psBuffer[128];
    FILE*pPipe;
    string output="";
    /* Run DIR so that it writes its output to a pipe. Open this
    * pipe with read text attribute so that we can read it  
    * like a text file. 
    */
    if((pPipe =_popen(msg,"rt"))==NULL)
    {
        return "err";
    }
    /* Read pipe until end of file, or an error occurs. */
    while(fgets(psBuffer,128,pPipe))
    {
        output+=psBuffer;
    }
    /* Close pipe and print return value of pPipe. */
    if(feof(pPipe))
    {        writing("process returned %d",_pclose(pPipe));
    }
    else
    {
        writing("Error: Failed to read the pipe to the end");
    }
    return output;
}

sscanf_s

فرض کنید ساعت و دقیقه و ثانیه را به صورت یک رشته از کاراکترها را دریافت کرده ایم.اکنون در نظر داریم که این سه عدد را به صورت سه متغییر از نوع عدد صحیح به دست آوریم. این کار توسط قطعه کد زیر بسیار آسان می شود.
این کار را می توان برای هر رشته ای و هر نوع متغییر و به تعداد دلخواه انجام داد.

int hh, mm, ss;
char*str="11:22:33";
sscanf_s(date, "%d:%d:%d", &hh, &mm, &ss);

Is Numeric

در بعضی مواقع یک عدد در متغییری از نوع string ذخیره شده است. در اینجا ممکن است لازم باشد چک کنیم آیا این رشته واقعا یک عدد است یا خیر.
این کار را می توان توسط قطعه کد زیر انجام داد.

#include <sstream> // for istringstream
using namespace std;
bool isNumeric(const char*pszInput,int nNumberBase)
{    istringstream iss(pszInput);
    if ( nNumberBase==10)
    {
        double dTestSink;
        iss<<dTestSink;
    }
    else if (nNumberBase==8||nNumberBase==16)
    {
        int nTestSink;
        iss<<((nNumberBase==8)?oct:hex)<<nTestSink;
    }
    else
    return false;
    // was any input successfully consumed/converted?
    if (!iss)
    return false;
    // was all the input successfully consumed/converted?
    return (iss.rdbuf()->in_avail()==0);
}

Copy Oject

از این تابع در ++c زیاد استفاده می شود.
فرض کنید دو متغییر از یک نوع یکسان و یا دو object از یک کلاس مشترک داشته باشیم.توسط این تابع می توان مقادیر موجود در یکی از این متغییر ها را در دیگری کپی کرد.

memcpy(&person_copy,&person,sizeof(person));

Read From File

خواندن محتویات فایل aa.csv به صورت خط به خط و چاپ آن در خروجی.
string line;
ifstream myfile("d://aa.csv");
if (myfile.is_open())
{
    while (getline(myfile,line))
    {
        cout<<line<<'\n';
    }
    myfile.close();
}
else 
{
    cout<<"Unable to open file"; 
}

Map

map لیستی از داده ها شبیه به آرایه است.با این تفاوت که هر عنصر در این لیست توسط یک کلید قابل دسترسی است.
توسط قطعا کد زیر به دو روش می توان جستجو کرد که آیا عنصر مورد نظر در متغییر map وجود دارد یا نه.

map<string,int>m;
if(m.find("a1a")==m.end())
{
   //not found
}
if(m.count("aa")!=0)//found
توسط کدهای زیر هم می توان لیست تمام کلیدها و مقادیر متناظر با آنها را هم به دست آورد.
map<int,int>  test_map;
for (std::map<int,int> ::iterator it=test_map.begin(); it!=test_map.end(); ++it)
{
    int key = it-> first;
    int value = it-> second;
}

Make Directory

ساختن پوشه در آدرس داده شده و چاپ رشته در خروجی در صورت موفقیت آمیز بودن این عمل.

#include <direct.h>
int stat;
stat = mkdir("d:\\aa");
if (!stat)
{
   printf("Directory created\n");
}

Copy String

کپی کردن یک رشته از نوع string در یک آرایه از کاراکترها.

string aa = "bb";
char cc[100];
strcpy(cc, aa.c_str());

Vector

نوعی آرایه پویا در ++c به نام vector وجود دارد. این آرایه علاوه براین که به آرایه های معمولی بسیار شبیه است دارای قابلیتهای زیادی هم می باشد.
در زیر بعضی از این قابلیت ها را می توانید مشاهده کنید.

دو آرایه به نام vector1 و myvector وجود دارد.
توسط کد زیر عناصر موجود در vector1 در ابتدای myvector قرار می گیرد.
در این صورت محتویات آرایه myvector عبارتند از : 1و2و3و4
حلقه for در انتها مقادیر م.جود در این آرایه را در خروجی چاپ می کند.

vector<int> vector1;
vector1.push_back(1);
vector1.push_back(2);
vector<int> myvector;
myvector.push_back(3);
myvector.push_back(4);
vector<int>::iterator it;
myvector.insert (myvector.begin(),vector1.begin(),vector1.end());
for (it=myvector.begin(); it<myvector.end(); it++)
{
   cout<<'a'<<*it;
}
توسط این کدها می توان وجود یک عدد(mynumber) را در آرایه مورد نظر(vec) جستجو کرد که آیا وجود دارد یا خیر.
vector<int>  vec;
if(find(vec.begin(), vec.end(), mynumber) != vec.end())
{
    return true;//found
}
تبدیل یک آرایه معمولی به آرایه ای از نوع vector.
string x[] = {"aa", "bb", "cc", "dd"};
vector<string> group(x, x + sizeof x / sizeof x[0]);
 تبدیل آرایه ای از نوع vector به آرایه ای معمولی به دو روش.
std::vector<double> v;
double*a = &v[0];
double arr[100];
std::copy(v.begin(), v.end(), arr); 
در کد زیر عنصر یکم از آرایه حذف می شود.
vector<int> vec;
vec.erase(vec.begin()+1);
در این قطعه کد می توان یک عنصر را در آرایه جستجو کرد و در صورت وجود مکان آن در آرایه را هم به دست آورد.
vector<int> vec;
vector<int>::iterator it=find(vec.begin(),vec.end(),mynumber);
if (it != vec.end())
{
    int nPosition=distance(vec.begin(),it);
}
تصور کنید آرایه ای از شیئ های مختلف از یک کلاس وجود دارد.هدف جستجو کردن برای یافتن یکی از این شیئ ها بر اساس داده هایی هست که در آن ذخیره شده است.در واقع جستجو در درون عنصرهای ذخیره شده در آرایه صورت می گیرد.
bool 
special_compare(string s1)
{
    bool ret = s1.compare("bb") == 0?1:0;
    return ret;
}
vector<string> mt4;
vector<string>::iterator it = find_if(mt4.begin(), 
mt4.end(), special_compare);
if (it == mt4.end())
{    cout<<"not 
found"<<endl;
}
else
{
   
 cout<<*it<<endl;
}

If File Exists

گاهی اوقات لازم است چک شود آیا فایلی در مسیر داده شده وجود دارد یا نه.
توسط کدهای زیر این کار را می توان انجام داد.

bool exists_file (char*name)
{
    if (FILE *file = fopen(name, "r")) {
        fclose(file);
        return true;
    } else {
        return false;
    }
}

Thread

استفاده از ترد در بسیاری از برنامه ها ضروری است. بدین صورت کا چند عمل به طور همزمان و جدا از هم را می توان در یک برنامه انجام داد.
برای این کار به دو صورت می توان عمل کرد.اگر مایل به استفاده از کتابخانه های MFC نیستید و یا برنامه شما در محیط کامند عمل می کند می توانید از قطعه کد اول استفاده کنید و در غیر این صورت از قعه کد دوم.

UINT __stdcall ThreadFunction(LPVOID param)
{    CClass*object= (CClass*)param;
    return 0;
}UINT     id_1;
HANDLE m_threadL=(HANDLE)_beginthreadex(NULL,256000,ThreadFunction,this,0,&id_1);
if(m_threadL!=NULL)
{    ::TerminateThread( m_threadL, -1000 );
    CloseHandle(m_threadL);
}

AfxBeginThread(ThreadProc, this);
UINT ThreadProc(LPVOID pParam)
{
    CClass*object= (CClass*)pParam;
    return 0;
}

Write

کار با رشته های کاراکتری و ترکیب متغییر های مختلف در یک رشته گاهی اوقات مشکل به نظر می رسد.بااستفاده از کد زیر به آسانی می توان این کار را انجام داد.
به عنوان مثال خروجی برنامه برای این کد :

write("out put : %s, %d, %f","test",12,12.3);

به صورت زیر است.
out put : test, 12, 12.3
void write(const char* pMsg, ...)
{
    char buffer[4096];
    va_list arg;
    va_start(arg, pMsg);
    vsnprintf(buffer, 4096, pMsg, arg);
    va_end(arg);
    cout<<buffer<<endl;
}

To Lower Case

در هنگام کار با استرینگها توابع زیادی وجود دارند که کار کردن با آنها را ساده می کنند.
با کدهای زیر می توان حروف استفاده شده در متغییر str را در صورت بزرگ بودن به کوچک تبدیل کرد.
به عنوان مثال رشته AbCdEf به abcdef تبدیل می شود.

string str;
transform(str.begin(), str.end(), str.begin(), ::tolower);

Write To File

در تابع زیر رشته msg در فایلی به نام filename و در آدرسی به نام path ذخیره می شود.

void writing(char*msg)
{    char  tmp[MAX_PATH];
    FILE *out;
    _snprintf(tmp,sizeof(tmp)-1,"%s\\%s",path,filename);
    if((out=fopen(tmp,"at"))!=NULL)
    {
        fprintf(out,"%s\n",msg);
        fclose(out);
    }
}

Print Time

توسط کدهای زیر می توان زمان حال را به صورت یک رشته از کارکترها دریافت کرد.
به عنوان مثال : 10:34:10 16-7-2016

struct tm * timeinfo;
char time1[80];
time_t time_1;
time(&time_1);
timeinfo = localtime ( &time_1 );
strftime (time1,80,"%Y-%m-%d %H:%M:%S",timeinfo);

Trace

در هنگام توسعه یک برنامه گاهی مشاهده تمام خروجیها در محیط کامند کار مشکل و یا غیر ممکن می باشد.
توسط یکی از دوخط زیر می توان خروجی برنامه خود را در محیط IDE مشاهده کرد.

OutputDebugString(_T("msg"));
TRACE("%d",f);

Split

رشته ای به نام str وجود دارد.می خواهیم آنرا به قطعه های مجزا که توسط کارکتر | از هم جدا می شوند تبدیل کنیم.
این کد این کار را انجام داده و در آرایه saItems ذخیره می کند.

vector<CString> split(CString str)
{
    int i = 0;
    vector<CString> saItems;
    for(CString sItem = sFrom.Tokenize(_T("|"),i); i >= 0; sItem = sFrom.Tokenize(_T("|"),i))
    {
        saItems.push_back(sItem);
    }
    return saItems;
}



برچسب ها :


پنجشنبه 7 مرداد 1395 :: نویسنده : امید صالحی
کنترل لیست یکی از مهمترین عناصر در برنمه های دسکتاپ می باشد که در اینجا اندکی از قابلیتهای آن نمایش داده می شود.
پس از باز کردن برنامه visual studio (در این آموزش از نسخه visual studio 2015 استفاده شده است) یک پروژه جدید MFC ایجاد کنید. این پروژه را dialog base قرار دهید.(برای اطلاعات بیشتر به آموزش اضافه کردن یک دگمه به دیالگ مراجعه کنید)و نام برنامه را MyListCtrl قرار دهید.
در پنجره ویرایش دیالگ یک list control و یک دگمه قرار دهید.لیست کنترل خود را توسط کلیک سلکت کنید سپس در پنجره properties در سمت چپ در مقابل view گزینه report را انتخاب کنید.
سپس دگمه خود را سلکت کنید و در پنجره properties در مقابل گزینه caption نام دگمه را به add تغییر دهید.



سپس لیست کنترل را رست کلیک کرده سپس در منوی باز شده گزینه add variable را انتخاب کنید.
در پنجره باز شده در قسمت variable name رشته m_mylist را تایپ کنید.



سپس دگمه add را دابل کلیک کنید تا پنجره زیر باز شود.در تابع ایجاد شده کدهای زیر را بنویسید.
void CMyListCtrlDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    static int number = 0;
    CString str;
    int degree;
    number++;
    str.Format(L"%d", number);
    int nIndex = m_mylist.InsertItem(0, str);
    m_mylist.SetItemText(nIndex, 1, _T("Rozita"));
    /* initialize random seed: */
    srand(time(NULL));
    /* generate secret number between 1 and 10: */
    degree = rand() % 20 + 1;
    str.Format(L"%d", degree);
    m_mylist.SetItemText(nIndex, 2, str);
    if (degree < 11)
    {
        str = L"Bad";
    }
    else
    {
        str = L"Good";
    }
    m_mylist.SetItemText(nIndex, 3, str);
}


در همین پنجره در تابع OnInitDialog کدهای زیر را درست بعد از TODO: Add extra initialization here بنویسد.

m_mylist.InsertColumn(0, _T("Number"), LVCFMT_LEFT, 90);
m_mylist.InsertColumn(1, _T("Name"), LVCFMT_LEFT, 90);
m_mylist.InsertColumn(2, _T("Degree"), LVCFMT_LEFT, 90);
m_mylist.InsertColumn(3, _T("Evaluation"), LVCFMT_LEFT, 90);






برنامه را اجرا کنید و سپس دگمه add را کلیک کنید.




به شما تبریک می گویم! شما یک برنامه دیگر توسط زبان ++C نوشتید.

سرس برنامه را می توانید از از این لینک به دست آورید.





برچسب ها :


پنجشنبه 7 مرداد 1395 :: نویسنده : امید صالحی
این دومین آموزش در زمینه ++c می باشد.برنامه در محیط visual studio 2015 نوشته شده است.هم اکنون این برنامه آخرین نسخه ماکروسافت در محیط visual studio می اشد.این برنامه از کتابخانه های MFC استفاده می کند.
برای شروع برنامه visual studio را باز کنید.سپس گزینه new project را انتخاب کنید.در این هنگام پنجره زیر باز می شود.در این پنجره گزینه mfc application را انتخاب کنید و به برنامه نام MyMFCApp بدهید.




در پنجره ای که باز می شود گزینه application type را در سمت چپ انتخاب کنید.در پنجره ای که مشاهده می کنید فقط گزینه های dialog based و use mfc in a static library را انتخاب کنید. هیچ یک از گزینه های دیگر را تغییر ندهید.



اکنون باید پنجره زیر را مشاهده کنید.




بر روی عبارت موجود در وسط صفحه کلیک کنید سپس دگمه دلیت را بزنید.با استفاده از پنجره tool box در سمت چپ صفحه یگ دگمه(button) و یک edit control در دیالگ خود قرار دهید.دگمه جدیدی را که ایجاد کردید را کلیک کنید(دابل کلیک نکنید).سپس در پنجره properties در سمت چپ در بخش caption نام دگمه را به my button تغییر دهید.




کنترل ادیت خود را راست کلیک کنید.در منوی باز شده گزینه add variable را انتخاب کنید.



در این پنجره در قسمت category گزینه value را انتخاب کنید.در قسمت variable type گزینه cstriing را انتخاب کنید.
در قسمت variable name عبارت m_myedit را تایپ کنید.




دگمه ای که در دیالگ ایجاد کردیم را راست کلیک کرده سپس گزینه add event handler را انتخاب کنید.در پنجره باز شده مانند شکل زیر در قسمت function handler name عبارت onbnclickedmybutton را تایپ کنید.



در پنجره ای که باز می شود مانند تصویر زیر کدهای خود را در تابع onbnclickedmybutton بنویسد.



اکنون برنامه آماده است.تنها کاری که باید انجام دهید کلیک کردن دکمه local windows debuger (فلش سبز رنگ) در بالای صفحه است.  در این هنگام در پنجره باز شده دگمه yes را بزنید.



اکنون برنامه شما باز می شود.دگمه my button را بزنید تا یک سلام به دنیا بکنید!



سرس برنامه را می توانید از این لینک به دست آورید.



برچسب ها :


سه شنبه 22 تیر 1395 :: نویسنده : امید صالحی
اگر قصد نوشتن برنامه به زبان ++C را دارید بهترین گزینه Microsoft Visual Studio می باشد. این نرم افزار دارای نسخه ای زیادی می باشد که آخرین نسخه آن Visual Stodio 2015 می باشد. در نسخه های مختلف محیطهای برنامه نویسی برای زبانهای دیگر تفاوتهای زیادی کرده اند و احیانا زبانهای برنامه نویسی جدید اضافه شده و یا زبانی حذف شده است. اما محیط کار برای زبان ++C به جز اضافه شدن بعضی قابلیتهای جدید تفاوت چندانی نکرده است.
در آموزش زیر از Visual Studio 20113 استفاده شده است.با کلیک بر روی هر یک از تصاویر می توانید آن را با کیفیت بهتر مشاهده کنید.
در اینجا ساخت یک برنامه ساده از نوع MFC مرحله به مرحله نمایش داده می شود.
Visual studio را باز کنید.سپس بر روی New Project در قسمت Start کلیک کنید.




در پنجره باز شده گزینه MFC Application را انتخاب کنید.در قسمت Name نام MyFirstApp را وارد کنید.سپس دگمه OK را بزنید.



در پنجره باز شده در بخش Application type گزینه Single document و در بخش Project styles گزینه MFC standard را انتخاب کنید.همچنین در بخش Use of MFC گزینه Use MFC in a static library را انتخاب کنید.
هیچ گزینه دیگری را تغییر ندهید و فقط برروی دگمه Finish کلیک کنید.



به شما تبریک می گویم. پروژه شما ساخته شد.فقط اندکی تغییر در آن داده سپس آن را کامپایل می کنیم.
در منوی View مطابق شکل زیر Recourse View را انتخاب کنید. همچنین می توان در صفحه کلید دگمه های Ctrl + Shift + E را بزنید.
اکنون در سمت چپ محیط IDE یک پنجره با عنوان Resource View قابل مشاهده است.


در پنجره ای که در قسمت بالا باز شد پوشه Menue را باز کرد سپس بر روی عبارت IDR_MAINFRAME  دابل کلیک کنید. پنجره منو مانند شکل زیر باز شود. آنچه مشاهده می کنید همان منوهایی هستند که در برنامه شما نمایش داده خواهند شد.



در پنجره باز شده منوی view را انتخاب کنید.در انتهای این منو (قسمت خالی) کلیک کرده و سپس عبارت My Dialog را تایپ کنید.سپس منوی جدید ایجاد شده را راست کلیک کرده در منوی باز شده گزین Add Event Handler را انتخاب کنید.


در پنجره باز شده در قسمت message type گزینه COMMAND و در قسمت Class list گزینه CMyFirstAppView را انتخاب کنید.
در قسمت Function handler name عبارت OpenMyDialog را وارد کنید.
سپس دگمه Add and Edit را بزنید.



اکنون پنجره ای به نام MyFirstAppView.cpp باز می شود.اگر دقت کنید می توانید تابعی را که ایجاد کرده اید ببنینید(OpenMyDialog).
در واقع هرگاه کاربر بر روی منوی MyDialog در View کلیک کند تمام کدهایی که در تابع قرار گرفته باشند اجرا خواهد شد.
در پنجره Recource View پوشه Dialog را باز کنید.در این پوشه دیالوگهای موجود در برنامه قابل مشاهده هستند.در اینجا فقط یک دیالگ وجود دارد و آن هم دیالوگ About است که در قسمت Help باز می شود.
برای اضافه کردن دیالوگ خود به برنامه پوشه dialog را راست کلیک کرده سپس گزینه Insert Dialog را انتخاب کنید.سپس بر روی دیالوگ جدید ایجاد شده(IDD_DIALOG1)دابل کلیک کنید.


همانطور که مشاهده می کنید پنجره دیالوگ جدید باز می شود. بر روی آن راست کلیک کرده سپس گزینه Add Class را انتخاب کنید.


در پنجره باز شده فقط در قسمت Class name عبارت CMyDialog را تایپ کنید.
سپس دگمه Finish را بزنید.



در پنجره Solution Explorer (اگر باز نیست می توانید آنرا در منوی View بازکنید) فایل MyFirstAppView.cpp را باز کنید. در بالای این فایل عبارت
 را تایپ کنید #include "MyDlg.h"





در پنجره Resource View گزینه ADD_DIALOG1 را دابل کلیک کنید تا پنجره دیالوگ جدیدی را که ایجاد کرده بودیم باز شود. با استفاده از پنجره Tool Box یک Static text را در دیالوگ خود قرار دهید.کنترل جدید خود(static text)را کلیک کنید.در سمت چپ پنجره Properties قرار دارد. اگر این پنجره وجود نداشت کنترل خود را راست کلیک کرده و از منوی باز شده گزینه Properties را انتخاب کنید.
در پنجره در مقابل ویژگی Caption رشته Hello Word را تایپ کنید.



به شما تبریک می گویم. شما اولین برنامه خود را به زبان ++C نوشتید.تنها کاری که باید انجام دهید کامپایل و سپس اجرای آن است.
در بالا تولبار برنامه را راست کلیک کنید.در منوی باز شده در مقابل گزینه Build یک علامت چک بگذارید. اکنون در تولبار دگمه Build solution را بزنید.پس از اتمام در همان تولبار فلش سبز رنگ را بزنید.اکنون برنامه شما باز خواهد شد.
در برنامه خود در منوی View زیرمنوی My Dialog را انتخا کنید.


اگر تمایل به دیدن فایل اجرایی برنامه خود هستید به محل ذخیره پروژه خود بروید
Documents\Visual Studio 2013\Projects\MyFirstApp
فایل مورد نظر در پوشه Debug قرار دارد.
برای اجرای برنامه خود در هر مکان و رایانه های دیگر به هیچ فایل دیگری احتیاج نیست.فقط آن را در محل مناسب copy و سپس paste کرده و سپس آن را اجرا کنید.



برچسب ها :


سه شنبه 15 تیر 1395 :: نویسنده : امید صالحی
در بسیاری از برنامه ها لازم است محتویات یک صفحه در وب خوانده شود. آسانترین راه استفاده از curl است. ولی برای استفاده از آن باید lib های آن را اضافه کرد.همچنین در هنگام اجرا به فایل dll آن هم احتیاج است.
در قطعه کد زیر فقط از توابع ++c استفاده شده است و بدون اضافه کردن برنامه یا کد خارجی می توان همان کار را انجام داد.
#include <winsock2.h>
#include <WS2tcpip.h>
#include <windows.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
    int main (){
    // Initialize Dependencies to the Windows Socket.
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
        cout << "WSAStartup failed.\n";
        system("pause");
        return -1;
    }

    // We first prepare some "hints" for the "getaddrinfo" function
    // to tell it, that we are looking for a IPv4 TCP Connection.
    struct addrinfo hints;
    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;          // We are targeting IPv4
    hints.ai_protocol = IPPROTO_TCP;    // We are targeting TCP
    hints.ai_socktype = SOCK_STREAM;    // We are targeting TCP so its SOCK_STREAM

    // Aquiring of the IPv4 address of a host using the newer
    // "getaddrinfo" function which outdated "gethostbyname".
    // It will search for IPv4 addresses using the TCP-Protocol.
    struct addrinfo* targetAdressInfo = NULL;
    DWORD getAddrRes = getaddrinfo("www.google.com", NULL, &hints, &targetAdressInfo);
    if (getAddrRes != 0 || targetAdressInfo == NULL)
    {
        cout << "Could not resolve the Host Name" << endl;
        system("pause");
        WSACleanup();
        return -1;
    }

    // Create the Socket Address Informations, using IPv4
    // We dont have to take care of sin_zero, it is only used to extend the length of SOCKADDR_IN to the size of SOCKADDR
    SOCKADDR_IN sockAddr;
    sockAddr.sin_addr = ((struct sockaddr_in*) targetAdressInfo->ai_addr)->sin_addr;    // The IPv4 Address from the Address Resolution Result
    sockAddr.sin_family = AF_INET;  // IPv4
    sockAddr.sin_port = htons(80);  // HTTP Port: 80

    // We have to free the Address-Information from getaddrinfo again
    freeaddrinfo(targetAdressInfo);

    // Creation of a socket for the communication with the Web Server,
    // using IPv4 and the TCP-Protocol
    SOCKET webSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (webSocket == INVALID_SOCKET)
    {
        cout << "Creation of the Socket Failed" << endl;
        system("pause");
        WSACleanup();
        return -1;
    }

    // Establishing a connection to the web Socket
    cout << "Connecting...\n";
    if(connect(webSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) != 0)
    {
        cout << "Could not connect";
        system("pause");
        closesocket(webSocket);
        WSACleanup();
        return -1;
    }
    cout << "Connected.\n";

    // Sending a HTTP-GET-Request to the Web Server
    const char* httpRequest = "GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n";
    int sentBytes = send(webSocket, httpRequest, strlen(httpRequest),0);
    if (sentBytes < strlen(httpRequest) || sentBytes == SOCKET_ERROR)
    {
        cout << "Could not send the request to the Server" << endl;
        system("pause");
        closesocket(webSocket);
        WSACleanup();
        return -1;
    }

    // Receiving and Displaying an answer from the Web Server
    char buffer[10000];
    ZeroMemory(buffer, sizeof(buffer));
    int dataLen;
    while ((dataLen = recv(webSocket, buffer, sizeof(buffer), 0) > 0))
    {
        int i = 0;
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            cout << buffer[i];
            i += 1;
        }
    }

    // Cleaning up Windows Socket Dependencies
    closesocket(webSocket);
    WSACleanup();

    system("pause");
    return 0;
}



برچسب ها : ++C،