Сбой при использовании объявленных переменных __declspec (thread) - PullRequest
3 голосов
/ 04 марта 2011

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

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

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

Спасибо, Привет

1010 * G.B. *

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

1 Ответ

5 голосов
/ 04 марта 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...