Сбой при использовании объявленных переменных __declspec(thread)

У меня есть DLL (написано на C), который использует статический поток локального хранилища (__declspec(thread)), и я хочу использовать эту DLL из графического интерфейса Visual Basic.

К сожалению, при запуске интерфейса в Windows XP та DLL, которая использует статическое локальное хранилище потока, аварийно завершает работу при попытке доступа к переменным потока.

Как я могу решить эту проблему?

С уважением

гигабайт

PS Я бы не хотел изменять DLL.

1 ответ

Решение

Это известное ограничение статического TLS. Хотя вы явно не звоните LoadLibrary()среда выполнения VB делает это от вашего имени.

Обратите внимание, что это ограничение было снято с Vista. Самая полная ссылка, о которой я знаю, находится в блоге Кена Джонсона.

Возможно, вам удастся обойти эту проблему, если вы включите DLL в таблицу импорта сгенерированного.exe, что, вероятно, потребует некоторого взлома PE, и я не уверен, что это жизнеспособная стратегия. В противном случае вам нужно будет изменить DLL.

Другие вопросы по тегам