PDA

View Full Version : سوال: فراخوانی یک فایل C++ در برنامه



X.Hijacker
چهارشنبه 02 بهمن 1392, 19:27 عصر
سلام دوستان

برنامه ی من حجمش بسیار بالاست و در جا های مختلف باید از یک سری کد استفاده کنم

من اومدم برنامه ام رو به 15 قسمت تقسیم کردم یعنی 15 تا فایل Cpp که هر کدام دارای جا های مختلف از برنامه هستند !

ایا راهی هست که بتونم این تیکه تیکه شده ها رو در برنامه ام فراخوانی کنم یعنی اون قسمتی که میخوام این یک سری کد بیان اجرا بشن ولی کد ها داخل یک فایل CPP دیگه باشه

نحوه ی استفاده اش هم بگید من فقط میدونم باید اینجوری فراخوانی کنم :
include "namefile.cpp"

ممنون

کامبیز اسدزاده
چهارشنبه 02 بهمن 1392, 21:04 عصر
خب بهترین روش این هستش که شما از هیدر استفاده کنید از فایل های .h که اصولا به صورت زیر فراخوانیش میکنند و شما بر اساس نیاز تنها با اینکلود کردن فایل هارو وارد و از کلاس ها و توابع استفاده میکنید.


#include "yourfile.h"

X.Hijacker
چهارشنبه 02 بهمن 1392, 22:36 عصر
شما متوجه نشدید !

من برنامه ام رو تیکه تیکه کردم الان میخوام هر قسمتشو اینکلود کنم

مثل قالب وردپرس که توی صفحه ی اصلی از هر جایی فایل های دیگه رو اینکلود میکنن منظورم اونجوریه

asdasd123123
شنبه 05 بهمن 1392, 11:57 صبح
دوست عزیز برنامه رو تکه تکه کن خیلی هم خوبه. اولا توابع و کلاس ها رو توی هیدر ها میزارن نه فایل cpp که سورس برنامه است. مثلا:

#ifndef my_function1_h_included
#define my_function1_h_included

// codes for function1

#endif

اونجایی که codes نوشتم تعریف تابع function1 رو بذار بعد فایلو با اسم func1.h ذخیره کن و کنار سورس اصلی برنامه بذار و اینجوری وارد برنامه کن:

#include "func1.h"

حالا یه موقع شما می خوای برنامه ای که از سورس (با پسوند cpp ) کامپایل شده و خروجی (با پسوند exe ) داره رو داخل یه برنامه ی دیگه قرار بدی. اولا کتابخانه ی cstdlib رو include کنید و از این تابع هر جای تابع main برنامه جدید که می خواهید برنامه قبلی رو وارد کنید استفاده کنید:

system("asd123.exe");

حالا برنامه ی asd123.exe که کنار سورس و احتمالا فایل اجرایی (موقع کامپایل باید حتما کنار سورس باشه حالا ممکنه فایل اجرایی کنار سورس باشه یا نباشه ولی موقع اجرای برنامه باید کنار فایل اجرایی باشه) برنامه جدید هست اجرا میشه. بعد که asd123 تموم شد main برنامه جدید ادامه پیدا می کنه. البته دقت کنید وارد کردن asd123.exe در برنامه جدید به معنی وارد کردن تعریف توابع، متغییرها و کلاس های asd123 به برنامه جدید نیست و برای این کار باید کار اولی که گفتم یعنی ساختن هیدر با پسوند دات اچ رو انجام بدید.
تابع سیستم یه رشته میگیره که همون کد cmd هست مثلا کد زیر باعث خاموش شدن کامپیوتر میشه:

system("shutdown -s -f -t 00");

اگه چند تا کد cmd رو پشت سر هم می خوای انجام بشه اونا رو تو فایلی با پسوند bat سیو می کنی و کنار سورس و احتمالا فایل اجرایی برنامه میذاری و اینجوری دستورات رو اجرا میکنی:

system("ali.bat");

MSK
یک شنبه 06 بهمن 1392, 13:25 عصر
او دستور اینکلود که شما استفاده کردید درست مثل این میمونه که محتوای اون فایل رو درست همونجا کپی-پیست کرده باشید. در نتیجه به این روش میتونید فایلهاتون رو تقسیم کنید.
یعنی یه تیکه از فایل رو کپی کنید توی یه فایل دیگه و اون فایل رو در همونجایی که ازش کپی کرده بودید اینکلود کنید. پسوند فایل و غیره هم اصلا مهم نیست.

اما این روش اصولی و متعارف انجام تقسیم بندی‌ها نیست.

همونطور که دوست دیگه گفتند روش این کار استفاده از هدر فایل ها ( h. ) هست بکمک فایلهای o.

به عنوان توضیح این چند مطلب رو میتونم بگم:

۱. اول اینکه دقت کنید که شما از هر چیزی که در داخل فایلتون استفاده می‌کنید، باید داخل همون فایل (یا فایل دیگه ای که اون رو اینکلود کردید) تعریف شده باشه. وگرنه کامپایل ارور میده.
۲. دوم دقت کنید که برای کامپایل شدن، نیازی نیست که حتما پیاده سازی توابع هم در همون فایل باشند. مثلا این کد بدون ارور کامپایل میشه:


void func();

int main()
{
func();
}


بله؛ حتی با اینکه من پیاده سازی func رو داخل این فایل نزاشتم، کامپایل ارور نمیده. اما اگه کلا در هیچ فایل دیگه ای هم که لینکر بهش دسترسی داره پیاده سازی این تابع وجود نداشته باشه، اونوقت لینک ارور میده.


پس راه حل اصولی اینه که تعریف همه چیزهایی رو که در برنامه استفاده می‌کنید در فایل‌های h. قرار بدید و اونها رو اینکلود کنید. اما پیاده سازی توابع رو توی فایل های جداگانه cpp قرار بدید.

موفق باشید

fahimeh1512
دوشنبه 07 بهمن 1392, 10:06 صبح
حالا یه موقع شما می خوای برنامه ای که از سورس (با پسوند cpp ) کامپایل شده و خروجی (با پسوند exe ) داره رو داخل یه برنامه ی دیگه قرار بدی. اولا کتابخانه ی cstdlib رو include کنید و از این تابع هر جای تابع main برنامه جدید که می خواهید برنامه قبلی رو وارد کنید استفاده کنید:

system("asd123.exe");

حالا برنامه ی asd123.exe که کنار سورس و احتمالا فایل اجرایی (موقع کامپایل باید حتما کنار سورس باشه حالا ممکنه فایل اجرایی کنار سورس باشه یا نباشه ولی موقع اجرای برنامه باید کنار فایل اجرایی باشه) برنامه جدید هست اجرا میشه. بعد که asd123 تموم شد main برنامه جدید ادامه پیدا می کنه. البته دقت کنید وارد کردن asd123.exe در برنامه جدید به معنی وارد کردن تعریف توابع، متغییرها و کلاس های asd123 به برنامه جدید نیست و برای این کار باید کار اولی که گفتم یعنی ساختن هیدر با پسوند دات اچ رو انجام بدید.



یعنی با این دستور اول فایل asd123.exe اجرا میشه بعد main برنامه خودمون اجرا میشه؟:متفکر:

asdasd123123
دوشنبه 07 بهمن 1392, 12:10 عصر
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
cout<<"before\n";
system("asd.exe"); // cout<<"and\n";
cout<<"after\n";
system("pause");
}