Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функции в си с именем в переменной 
V
    Опции темы
kavkaz
Дата 26.1.2011, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: нет
Всего: 2



Есть необходимость вызывать функцию, при условии, что ёё имя задано в переменной.
Функции также нужно передать аргументы.

В какую сторону рыть?
PM MAIL ICQ Skype   Вверх
mes
Дата 26.1.2011, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



смотря что за функция.. если экспортируемая с длл, то см. GetProcAddress
иначе самостоятельно составить карту соответствий строк функциям..


--------------------
PM MAIL WWW   Вверх
kavkaz
Дата 26.1.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: нет
Всего: 2



Всё банально
Код

#include "some_header.h"

Но с кол-вом функций больше 20-30 писать карту не хотелось бы
PM MAIL ICQ Skype   Вверх
boostcoder
Дата 26.1.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(kavkaz @ 26.1.2011,  09:40)
Всё банально
Код

#include "some_header.h"

Но с кол-вом функций больше 20-30 писать карту не хотелось бы

это вы о чем?

зы
а по поводу карты соответствия имен и функций - у mes в этом огромный опыт. вот только я не представляю как это реализовать в Си smile 
PM WWW   Вверх
kavkaz
Дата 26.1.2011, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: нет
Всего: 2



Позвольте ещё уточнить.
Вот пример кода
Код

#include <stdio.h>

int some_func()
{
    printf("work\n");
    return 123;
}

int main(int argc, char **argv)
{
    char *sub = "some_func";
    
    
    return 0;
}


Какие нужно здесь провести преобразования в main, чтобы вызвать функцию, название которой в переменной out ?

На какие темы гуглить для этого?

PM MAIL ICQ Skype   Вверх
boostcoder
Дата 26.1.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(kavkaz @  26.1.2011,  10:47 Найти цитируемый пост)
На какие темы гуглить для этого?

метагенераторы
PM WWW   Вверх
mes
Дата 26.1.2011, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(boostcoder @  26.1.2011,  09:13 Найти цитируемый пост)
а по поводу карты соответствия имен и функций - у mes в этом огромный опыт.

 smile, не такой уж и большой.. 


Цитата(boostcoder @  26.1.2011,  09:13 Найти цитируемый пост)
 вот только я не представляю как это реализовать в Си 

а чего тут непонятного может быть? в простом случае составляете массив структур { имя, функция } и кол-функцию, для обертки всего этого..

Добавлено через 3 минуты и 52 секунды
Цитата(boostcoder @  26.1.2011,  09:51 Найти цитируемый пост)
метагенераторы 

kavkaz, я так понимаю задачка учебная ? тогда смысла в генераторах нет..


Это сообщение отредактировал(а) mes - 26.1.2011, 11:00


--------------------
PM MAIL WWW   Вверх
mes
Дата 26.1.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(kavkaz @  26.1.2011,  09:47 Найти цитируемый пост)
 чтобы вызвать функцию, название которой в переменной

http://liveworkspace.org/code/cbfc0bbd740e...9324f7b010a88d8


--------------------
PM MAIL WWW   Вверх
kavkaz
Дата 26.1.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 26.12.2007

Репутация: нет
Всего: 2



mes, Задача не то, чтобы учебная, пробую писать модуль для perl (XS). Вот думал передавать обертке имя функции, которую нужно вызвать, чтобы получить сгенерированные данные.

Добавлено через 4 минуты и 17 секунд
Цитата(mes @  26.1.2011,  11:19 Найти цитируемый пост)

http://liveworkspace.org/code/cbfc0bbd740e...9324f7b010a88d8 


Спасибо mes, вопрос исчерпан, для затравки более чем достаточно.
PM MAIL ICQ Skype   Вверх
xvr
Дата 26.1.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(kavkaz @  26.1.2011,  08:47 Найти цитируемый пост)
В какую сторону рыть? 

В сторону скриптовых языков. Ни С ни С++ напрямую это не поддерживают.

PM MAIL   Вверх
boostcoder
Дата 26.1.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(mes @  26.1.2011,  11:19 Найти цитируемый пост)
http://liveworkspace.org/code/cbfc0bbd740e...9324f7b010a88d8 

неее, так не честно smile  сигнатура навязана.
PM WWW   Вверх
mes
Дата 26.1.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(boostcoder @  26.1.2011,  10:39 Найти цитируемый пост)
 сигнатура навязана. 

навязать все равно, что  нибудь придется.. иначе никак.. 
можно решить путем разрешения списка сигнатур, а можно наоборот аргументы привести к единому стилю, например, список вариантов.. 



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0865 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.