Доступ к символу класса с помощью dlsym

Я хочу получить доступ к символу класса из моей общей библиотеки (.so)
Это правильный путь мне нужно сделать это.

MyClass* pMyClass= (MyClass*)dlsym(phandle, "MyClass");

Если это правильный путь, тогда у меня должен быть заголовок MyClass для приведения.
Я хочу знать, есть ли другой способ сделать это, не включая заголовок?

Спасибо

1

Решение

Как известно, dlsym возвращается в основном void * нетипизированный указатель.

Этот указатель является адресом символа — просто число. Если у вас есть

class MyClass instance;

в вашем .so, dlsym вернет значение &instance, Там нет другой информации там. к dlsym, instance это просто адрес области памяти. Если у тебя есть

char instance[sizeof(MyClass)]

вы получите точно такое же значение.

Итак, чтобы ответить на ваш вопрос — нет, нет сведений о содержании символа, адрес которого dlsym возвращается. Вы должны добавить это знание самостоятельно. Вот почему вы должны бросить результат dlsym и именно поэтому вам нужно включить заголовочный файл.

1

Другие решения

Единственные символы, которые вы можете получить с dlsym те, которые
соответствуют чему-то в памяти: объект или функция.
Имя класса не является ни тем, ни другим. Вы можете получить указатель на объект
типа класса, но вы ничего не можете сделать с ним (даже имя
тип класса) без заголовка где-то. (Ты можешь использовать
предварительное определение класса в точке, где вы делаете
dlsym, но так как вы ничего не можете сделать с указателем на
неполный тип, это не купит вам много void*.)

1

По вопросам рекламы [email protected]