Одна точка входа DLL для многих функций

В обычной DLL обычно есть отображение точек входа и функций в DLL 1: 1. У меня есть DLL, которая имеет около 50 функций. Поддерживать их все непросто, и если сигнатуры или типы меняются, то все они должны обновляться и так далее.

Я думал о создании 1 точки входа для них всех и посылке кода, который указывал единой точке входа, какую функцию вызывать в DLL. Может ли это вызвать какие-либо проблемы, такие как узкие места, особенно в поточно-ориентированной DLL? Я не могу думать о каких-либо недостатках, так как этот подход будет имитировать запись COM и / или поиск VTABLE или что-то подобное с одной точкой входа.

Например:

В обычной DLL могут быть экспортированы следующие три функции:

Func1
Func2
Func3

У всех разные точки входа

Предлагаемый обходной путь:

Звонки Func1(iCode) в DLL

экспортируемый Func1 в картах DLL iCode в Func2 или Func3 или Func4, … Func50 и т. д.

Таким образом, остается только 1 подпись (с явной связью), а не 50. Я не могу предвидеть никаких узких мест. Я что-то упускаю из виду?

1

Решение

Предложенная вами трансформация ничего не изменит. Функции все еще являются де-факто функциями с изменяющимися аргументами и так далее.

Число, которое выбирает функцию в таблице, является еще одной формой обращения к функции.

Первое, что произойдет, это то, что программистам, использующим явную «ioctl-подобную» диспетчеризацию с номерами функций, это не очень понравится, и они напишут процедуры-заглушки, которые скрывают диспетчеризацию, что сделает их код более читабельным, и позволит им делать вещи, как ставить точки останова на отдельных функциях. Эти заглушки-обертки могут иметь те же сигнатуры, что и исходные функции, поэтому вы вернулись к исходной точке.

Да, а в Windows функции в DLL уже обозначены числовым индексом! .def В файле присваиваются порядковые номера именам или что-то в этом роде. Посмотрите на эту запись MSDN.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]