Как загрузить несколько экземпляров для динамической библиотеки DLL в MFC - PullRequest
0 голосов
/ 24 октября 2011

Мне было интересно, есть ли способ явно загрузить несколько экземпляров DLL (т.е. с помощью вызова LoadLibrary).Обычно процесс загружает DLL только один раз, когда вызывается LoadLibrary (так что одна копия библиотеки находится в памяти процесса), и все последующие вызовы LoadLibrary, выполненные для той же библиотеки, будут возвращать один и тот же дескриптор библиотеки., вернул самый первый звонок.Чтобы быть более конкретным, я хочу иметь возможность загружать отдельный экземпляр DLL для каждого потока, созданного внутри процесса.В настоящее время, если я выполняю LoadLibrary в каждом потоке, я просто получаю один и тот же указатель на один экземпляр библиотеки, находящийся в адресном пространстве процесса, и все потоки фактически ссылаются на одни и те же функции из библиотеки (здесь возникает большой беспорядокв моем приложении).Вместо этого я хочу, чтобы каждый поток создавал отдельный экземпляр библиотеки в отдельном пространстве памяти, чтобы потоки не мешали друг другу при вызове функций из библиотеки.

1 Ответ

0 голосов
/ 24 октября 2011

Я не думаю, что это возможно (пока вы не создадите новый процесс и не загрузите DLL в этом процессе).DLL загружаются на уровне процесса (следовательно, имеют записи в блоке управления процессом).Хотя ваша DLL может определить, создан ли новый поток в хост-приложении, чтобы он мог инициализировать данные, специфичные для TLS, в методе DLLMain.

...