Сбой при использовании объявленных переменных __declspec(thread)
У меня есть DLL (написано на C), который использует статический поток локального хранилища (__declspec(thread)
), и я хочу использовать эту DLL из графического интерфейса Visual Basic.
К сожалению, при запуске интерфейса в Windows XP та DLL, которая использует статическое локальное хранилище потока, аварийно завершает работу при попытке доступа к переменным потока.
Как я могу решить эту проблему?
С уважением
гигабайт
PS Я бы не хотел изменять DLL.
1 ответ
Это известное ограничение статического TLS. Хотя вы явно не звоните LoadLibrary()
среда выполнения VB делает это от вашего имени.
Обратите внимание, что это ограничение было снято с Vista. Самая полная ссылка, о которой я знаю, находится в блоге Кена Джонсона.
Возможно, вам удастся обойти эту проблему, если вы включите DLL в таблицу импорта сгенерированного.exe, что, вероятно, потребует некоторого взлома PE, и я не уверен, что это жизнеспособная стратегия. В противном случае вам нужно будет изменить DLL.