ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
14 июля
511715
POV (29.04.2014 19:43, просмотров: 3695)
Подскажите элегантное решение по вызову функций dll в потоке... Функций много, все с разными параметрами и разными возвращаемыми значениями. Кто какой механизм посоветует для реализации этого? Я сейчас задачу-то выполнил, но выглядит это колхозно. И если потребуется аналогичное сделать для другой либы, то вновь катастрофически много ручной работы. Поясню что именно я сделал: 1. Объявил типы указателей на функции. 2. Объявил указатели на функции. 3. Динамически подключил функции через getProcAddress. (тут пока все обычно при работе с dll) 4. В классе потока объявил точно такие же функции (но ничего не возвращающие). 5. Объявил приватные переменные всех типов которые могут быть возвращены (int, String, char*). 6. Объявил приватные переменные аналогичные всем какие могут быть во входных параметрах функций. 7. В реализации функций входные параметры присваиваю этим приватным переменным (см. п.6). 8. Устанавливаю индекс, соответствующий функции (её номер). 9. В методе Execute потока через switch-case по индексу вызываю уже функцию либы, взяв параметрами переменные из п.6. 10. Возврат функции присваиваю одной из переменных п. 5. 11. Обнуляю индекс. 12. В главном потоке по факту обнуления индекса понимаю, что вызов функции отработан и в выходной переменной нужного мне типа лежит значение.