Получение пустого указателя через dlsym(), цель состоит в том, чтобы вызвать функцию, на которую ссылается этот указатель. Попытка преобразования посредством приведения с использованием static_cast или reinterpret_cast не удалась, в отличие от приведения в стиле C.
Прямое преобразование указателя void в указатель на функцию недопустимо в C 98/03. Однако C 0x предлагает условную поддержку, позволяющую реализации диктовать поведение. большинство платформ:
void *gptr = dlsym(какой-то символ..);
typedef void (*fptr)();
fptr my_fptr = reinterpret_cast
void *gptr = dlsym(some symbol..);
typedef void (*fptr)();
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
Сложный, но переносимый подход:
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;
// Получить адрес как указатель объекта
void (**object_ptr)() = &my_ptr;
// Преобразование в void** (также указатель объекта)
void **ppv = reinterpret_cast
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3