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