Кажется, я часто трачу слишком много времени, пытаясь заставить макрос #define делать именно то, что я хочу. Я опубликую свою текущую дилемму ниже, и любая помощь приветствуется. Но на самом деле главный вопрос в том, может ли кто-нибудь порекомендовать какую-либо утилиту для быстрого отображения того, что на самом деле делает макрос? Кажется, что даже медленный процесс проб и ошибок пошел бы намного быстрее, если бы я мог видеть, что не так.
В настоящее время я динамически загружаю длинный список функций из созданной мной DLL. Как я установил, указатели на функции имеют те же номера, что и экспортируемые функции, а typedef (s), используемые для их прототипирования, имеют те же имена, но с добавлением подчеркивания. Поэтому я хочу использовать определение, чтобы упростить назначения длинного длинного списка указателей функций.
Например, в приведенной ниже инструкции кода «hexdump» - это имя точки функции typedef, а также имя функции, тогда как _hexdump - это имя typedef. Если GetProcAddress () завершается ошибкой, счетчик ошибок увеличивается.
if (!(hexdump = (_hexdump)GetProcAddress(h, "hexdump"))) --iFail;
Допустим, я хотел бы заменить каждую строку, как указано выше, макросом, например так ...
GETADDR_FOR(hexdump )
Ну, это лучшее, что я придумал до сих пор. Это не работает (мой // комментарий только для предотвращения форматирования текста в сообщении) ...
// #define GETADDR_FOR(a) if (!(a = (#_#a)GetProcAddress(h, "/""#a"/""))) --iFail;
И снова, в то время как я оценил бы ту глупую ошибку, которую я совершил, мне пришлось бы иметь утилиту, которая показывала бы мне ошибку моих путей, просто подключив мой макрос.