Имам 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".
TIA