У меня есть функция с именем testdynamic, которая вызывается динамически с помощью dlopen и dlsym. Теперь я создал структуру:
typedef struct BigStruct{
char el[2000];
}BigStruct;
который используется для хранения параметров функции. Затем я выделяю место для переменной с именем:
void *cur = (void*)malloc(totalSize);
где totalSize — размер параметров. У меня есть эта информация заранее.
После этого копирую все параметры в cur.
Затем я передал его в BigStruct следующим образом:
BigStruct *bg;
bg = (BigStruct*)cur;
И запустить его так:
void* ch = (void*)testdynamic(*bg);
Теперь в функции testdynamic, когда я печатаю параметры, я получаю правильные значения для всех типов данных, таких как char**
, int*
, int и т. д.
Единственный тип данных, который не работает, это char*. Даже до вызова функции с *bg
содержимое bg->el корректно даже для char*. Но, после звонка возникает ошибка.
В чем может быть проблема?
Вот код testdynamic
char* testdynamic(char* x, char* y){
printf("%s %s\n", x, y);
return "hello";
}
Я хочу передать параметры функции testdynamic из своего кода.
Эта testdynamic может быть любой функцией, которая может принимать любой параметр любого типа.
Я получаю информацию о функции во время выполнения. Поскольку размер char* равен 1, я привожу все к char*, а затем передаю его функции.
В этот момент я получаю ошибку времени выполнения, если печатаю внутри testdynamic что-либо типа char*
.
testdynamic
? Как вы запихиваете туда аргументы? Почему вы передаете COPYBigStruct
в стекеtestdynamic
? Как вы распаковываете аргументы внутриtestdynamic
? Что делать с этими аргументами? И Т. Д. - person Nik Bougalis   schedule 05.08.2013void *
или из него автоматически преобразуются в соответствующий тип. - person mohit   schedule 05.08.2013testdynamic(*bg)
и плохим после него, укажите кодtestdynamic()
. - person chux - Reinstate Monica   schedule 05.08.2013