PDA

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



mgupload
دوشنبه 20 فروردین 1397, 01:43 صبح
با سلام

من قصد دارد یه برنامه بنویسم که بخشی از اون باید یه برنامه رو با آرگمان های ورودی (فرضا به فرم a.xxx arg1 arg2) فراخوانی کنم

قطعه کدی که نوشتم به فرم زیر هست :


#include <windows.h>
#include <conio.h>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;


template <typename T>
string NumberToString(T pNumber)
{
ostringstream oOStrStream;
oOStrStream << pNumber;
return oOStrStream.str();
}


string Run(int i)
{
int X,Y;
if(i == 1)
{
X = 10;
y = 10;
}
else
{
X = 0;
Y = 20;
}
return "a.xxx " + NumberToString(X) + " " + NumberToString(Y);
}


void main()
{
system(Run(1));
}


خطای زیر رو نشون میده

Could not find a match for 'system(string)'

برنامه a.xxx در کنار فایل هست. دستور فرضا به فرم a.xxx arg1 arg2 نیز از طریق ویندوز و کنسول قابل اجرا هست

این برنامه رو با Borland C++‎‎‎ Complier 5.5 نوشتم

لطفا می توانید مرا راهنمایی کنید

با تشکر

maarek
چهارشنبه 22 فروردین 1397, 22:50 عصر
رشته ای که return میکنی یه بار print کن ببین همه چیز درسته هست..
میتونی با تابع system یه فایل دیگه ای رو اجرا کنی اما بهتر هست که یه پروسس بسازی و بعد فایل مورد نظرت و اجرا کنی.
اگر داخل ویندوز هستی با تابع CreateProcess (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx) میتونی اینکارو انجام بدی و اگر لینوکس هستی با fork (http://linux.die.net/man/2/fork) و exec (http://linux.die.net/man/3/exec) پروسس جدید بسازی و فایل تو اجرا کنی.
البته فکر میکنم میشه از توابع POSIX داخل ویندوز استفاده کنی اینجا (https://technet.microsoft.com/en-us/library/bb463220.aspx) رو نگاه بنداز

pe32_64
پنج شنبه 13 دی 1397, 21:50 عصر
با سلام

من قصد دارد یه برنامه بنویسم که بخشی از اون باید یه برنامه رو با آرگمان های ورودی (فرضا به فرم a.xxx arg1 arg2) فراخوانی کنم

قطعه کدی که نوشتم به فرم زیر هست :


#include <windows.h>
#include <conio.h>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;


template <typename T>
string NumberToString(T pNumber)
{
ostringstream oOStrStream;
oOStrStream << pNumber;
return oOStrStream.str();
}


string Run(int i)
{
int X,Y;
if(i == 1)
{
X = 10;
y = 10;
}
else
{
X = 0;
Y = 20;
}
return "a.xxx " + NumberToString(X) + " " + NumberToString(Y);
}


void main()
{
system(Run(1));
}


خطای زیر رو نشون میده

Could not find a match for 'system(string)'

برنامه a.xxx در کنار فایل هست. دستور فرضا به فرم a.xxx arg1 arg2 نیز از طریق ویندوز و کنسول قابل اجرا هست

این برنامه رو با Borland C++‎‎‎‎ Complier 5.5 نوشتم

لطفا می توانید مرا راهنمایی کنید

با تشکر
سلام
1- رشته ارسال برای اجرا اشتباه هستش.بین اسم برنامه و اولین پارامتر اون باید یک space باشه. که شما رشته ارسالی رو بدون اون فاصله ی اول ساختی.
2- a.xxx چیه دیگه ؟ xxx باید حتما پسوند فایل اجرایی سیستم عامل باشه. مثل: a.exe
نکته :
اون تابع NumberToString بیهوده هستش.این امکان رو خود runtime داره