Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Параметр у вункции указатель... / 5 сообщений из 5, страница 1 из 1
09.12.2006, 22:18
    #34188112
qwantor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметр у вункции указатель...
Доброго времени суток!!!
Ситуация следующая:
в DLL-ке есть функция:
double fun (double x, double y, double (*func)(double),int t)
Эта функция вызывается из моего проекта:
double a=fun(1,2,cos,3);
а нужно сделать так, что бы вместо "cos" автоматически вставлялась бы функция из ComboBox-a, т.е. типа того:
double a=fun(1,2,ComboBox1->Text,3);
Но это естественно не работает.
Я надеюсь я более менее чётко выразил свой мысли или хотя бы на интуитивном уровне стало бы ясно, что я хочу узнать. Всем заранее спасибо!!!
...
Рейтинг: 0 / 0
09.12.2006, 22:51
    #34188128
qwantor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметр у вункции указатель...
Прошу прощенье за "вункции"
...
Рейтинг: 0 / 0
10.12.2006, 03:28
    #34188227
XED
XED
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметр у вункции указатель...
ну если речь идет именно о комбобоксе, то делать как бы и нечего... все счлишком просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
double MyFunc (double arg) {
  return exp( 0 . 5 *sin(arg+M_PI_4));
  }

void KakajaToTamFunctionChtobEjPustoBylo () {
  double a;
  switch (cmbFunctions->ItemIndex) {
    case  0 : a = fun( 1 , 2 ,cos, 3 ); break;
    case  1 : a = fun( 1 , 2 ,sin, 3 ); break;
    case  2 : a = fun( 1 , 2 ,MyFunc, 3 ); 
    }
  }
вариант другой. если все возможные варианты не заданы жестко... Ну наверное, думается мне, придется вводить строку-функцию (по типу exp(0.5*sin(arg+M_PI_4))) через editbox и заниматься ее анализом...
...
Рейтинг: 0 / 0
11.12.2006, 04:00
    #34188917
qwantor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметр у вункции указатель...
XEDну если речь идет именно о комбобоксе, то делать как бы и нечего... все счлишком просто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
double MyFunc (double arg) {
  return exp( 0 . 5 *sin(arg+M_PI_4));
  }

void KakajaToTamFunctionChtobEjPustoBylo () {
  double a;
  switch (cmbFunctions->ItemIndex) {
    case  0 : a = fun( 1 , 2 ,cos, 3 ); break;
    case  1 : a = fun( 1 , 2 ,sin, 3 ); break;
    case  2 : a = fun( 1 , 2 ,MyFunc, 3 ); 
    }
  }
вариант другой. если все возможные варианты не заданы жестко... Ну наверное, думается мне, придется вводить строку-функцию (по типу exp(0.5*sin(arg+M_PI_4))) через editbox и заниматься ее анализом...


case 2: a=fun(1,2,MyFunc,3) работать не будет,т.к. все функции типа MyFunc находятся, в отдельном модуле, который может и обнавляться, и изменяться полностью и поэтому распознание ни как не напишишь.

В DLL-ке
реализация функции
double fun (double x, double y, double (*func)(double),int t)

выглядит как-то так:
func(x+x*x+15*x*x*x)

в файле проекта вместо func, будет подставляться любая функция, скажем из math.h(соответственно и math.h должна быть подключена в DLL).
Мне просто жуть как интерестно можно ли вместо cos в:
a = fun(1,2,cos,3); подставить какой-нибудь хитро-сплетённый указатель или ссылку на функцию из ComboBox-a или из Edit-а, т.е. надо фактически как-то взять и конвертировать AnsiString в double(*)(double).
...
Рейтинг: 0 / 0
11.12.2006, 09:44
    #34189130
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметр у вункции указатель...
Есть нечто на эту тему. Может поможет?..
//----------------------------------------------------
int IntDLCallChar(char *FunctionName, char *Param){
// вызов функции int (*f)(char *); по имени FunctionName
// вызываемая ф-я должна иметь прототип
// extern "C" int __export WINAPI <FunctionName>(char *Param);

int k;
HMODULE hm;
FARPROC fp=NULL;
int (*f)(char *);

hm=GetModuleHandle(NULL);
fp=GetProcAddress(hm,FunctionName);
if(fp==0){
AnsiString s;
s=AnsiString("IntDLCallChar():\nНе найдена ф-я ")+FunctionName;
MessageBox(0,s.c_str(),"Ошибка",MB_OK);
*Param='\0';
return 0;
}
f=(int(*)(char *))fp;
k=(f)(Param);
return k;
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Параметр у вункции указатель... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]