У меня есть программа на C, где я получаю указатели функций «динамически» по имени функции (т.е. я передаю имя функции в виде строки и получаю указатель на функцию). Я уже делаю это в Linux, используя dlopen и dlsym, и я полагаю, что это также будет работать в любой другой Unix-подобной системе с dlfcn.
Проблемы начались, когда я попытался портировать эту программу на Windows с помощью MinGW. Когда я пытаюсь найти имя, используя «GetProcAddress (handle, symbol_name), где «symbol_name» — это имя моей функции обратного вызова, а «handle» — это дескриптор текущего исполняемого файла, возвращаемый «GetModuleHandle (NULL)», я ничего не получаю. потому что изменение имени MinGW добавляет «_» к моему имени символа.
Очевидное решение (префикс «_» к нужному мне символу) кажется немного «опасным» для переносимости (может ли компилятор добавить два символа подчеркивания для некоторых из них? Я не знаю), поэтому я спрашиваю:
Есть ли лучший способ предотвратить искажение имен моих символов компилятором? (или их подмножество, только обратные вызовы, которые мне нужно найти динамически);
Или способ заставить GetProcAddress найти их, даже если они искажены?
Я также попробовал вариант -fno-leading-underscore, но он также убрал искажение всех внешних символов, что сделало невозможным связывание программы с stdlib и т. д. (также немного пугают предупреждения в документации).
Также обратите внимание, что я использую чистый C — ни в одной части моего кода нет C++ — и весь мой код живет в одном «.exe».
ТИА