Скажите, как загрузить в память несколько копий однопоточной (non-thread-safe) DLL? Я хочу выполнять её функции над разными входными данными, да так, чтобы статические и динамические данные одной копии DLL отличались от данных другой копии.
(Я смог бы определять нужную копию по параметру входных данных).
Всё, что я смог предположить после краткого обзора интернета, включая "Captain COM", это возможность написания COM DLL server с несколькими apartments. Нет ли готового открытого образца для задачи моего типа?
Демультиплексирование однопоточной DLL
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Ильгиз
- Пользователь
- Сообщения: 55
- Зарегистрирован: 13 сен 2005, 12:00
- Откуда: Уфа - Китченер
-
- Пользователь
- Сообщения: 92
- Зарегистрирован: 20 фев 2003, 00:41
Re: Демультиплексирование однопоточной DLL
Как вариант, можно создавать копию DLL под другим именем для каждой загрузки. В качестве вариции на эту тему можно использовать комбинации длинных и коротких имен файлов. Например если сказать LoadLibrary( "C:\\Program Files\\my application\\my dll.dll") и LoadLibrary( "C:\\Progr~1\\myapp~1\\mydll~1.dll"), то получишь две загруженные копии одной и той же DLL. Но с последним надо быть очень осторожным, напр коротокого имени может не быть и т.д.... Еще один способ избежать физического копирования это создавать хард линки на исходную DLL.