PDA

View Full Version : سوال: تغییر تابع در زمان اجرا



UfnCod3r
دوشنبه 06 خرداد 1392, 22:31 عصر
سلام کسی می دونه چطور میشه محتویات ی تابع رو توسط خود برنامه زمان اجرا تغیر داد ؟:متفکر:
مثلا ی همچین چیزی

__declspec(noinline) __declspec(noreturn) int Func(int a, int b)
{

}

__declspec(noinline) int Func1(int a, int b)
{
return a+b;
}

void* addr1 = (void*)Func;
void* addr2 = (void*)Func1;
*addr1 = *addr2;

از توابع virtual و اشاره گر نمی خوام استفاده کنم و در ضمن توسط خود برنامه ای ک این تابع توشه می خوام کار انجام بشه وگرنه با ی Batch فایل هم کارم راه میفته

UfnCod3r
چهارشنبه 08 خرداد 1392, 12:24 عصر
کسی راه حلی چیزی نداره؟
:گریه::ناراحت:

saied_hacker
چهارشنبه 08 خرداد 1392, 17:15 عصر
بین یه همچین چیزی به کارت میاد ؟

مقدار _funcmode_ رو هرجا خواستی تغییر بده و بعد هروقت myfunc رو صدا کنی اون تابع فراخانی میشه ، پارامتر هارم میتونی راحت بهش اضافه کنی( نمیدونم درست فهمیدم یانه )


#include <iostream>

using namespace std;

void s();
void p();

int _funcmode_ = 200;

#define myfunc() { \
if(_funcmode_ == 100) \
s(); \
if(_funcmode_ == 200) \
p(); \
}


int main()
{
//myfunc();
int n = 100;
while(n != 0)
{
if(n == 100)
{
_funcmode_ = 100;
}
else if(n == 200)
{
_funcmode_ = 200;
}

myfunc();
cin >> n;
}
return 0;
}



void s()
{
cout << "s func\n";
}

void p()
{
cout << "p func\n";
}

UfnCod3r
چهارشنبه 08 خرداد 1392, 17:27 عصر
ن این موقع کامپایله خب من می خوام وقتی برناممم اجرا میشه تابع رو تغییر بدم .

eAmin
پنج شنبه 09 خرداد 1392, 21:52 عصر
فکر میکنم این بدردتون بخوره: http://runtimecompiledcplusplus.blogspot.it/

مصطفی ساتکی
جمعه 10 خرداد 1392, 09:39 صبح
به این صورت اگر باشه مشکلتون حل نمی شه؟

#include <iostream>
using namespace std;
int func1(int a,int b)
{
return a*b;
}
int func2(int a,int b)
{
return a+b;
}
void func(int a,int b, int f(int,int))
{
cout<< f(a,b);
}
int main()
{
bool cond = false;
int a = 10;
int b = 20;
if (cond)
func(a,b,func1);
else func(a,b,func2);
return 0;
}

UfnCod3r
جمعه 10 خرداد 1392, 13:57 عصر
نه .
بیخبال این کار شدم .:اشتباه:
ی patch می نویسم ک توابع رو تغیر بده . ولی خب من می خواستم برنامه خودش خودشو تغییر بده :ناراحت: