Имам функция с име 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
? Как напъхвате аргументи вътре в него? Защо предавате КОПИЕ наBigStruct
в стека на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