Как я могу повторно инициализировать все глобальные переменные в статической библиотеке C, используя Visual Studio 2008? - PullRequest
0 голосов
/ 16 июня 2011

По сути, мне нужен способ сделать это, и я не против, насколько уродливым или грязным он становится для этого.

Причина в том, что библиотека размещается приложением для симуляции. Каким-то образом я должен иметь возможность сбросить симуляцию, поэтому верну всю библиотеку обратно в состояние по умолчанию. (или как можно ближе к состоянию по умолчанию)

возможно ли найти раздел глобальной памяти и memcpy к нему?

Не нужно писать что-то, что вручную сбрасывает каждую глобальную переменную.

любые идеи приветствуются!

(на самом деле не заинтересованы в том, что «невозможно сделать» или «изменить код, чтобы он не имел глобальных ответов»)

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Моя первая мысль - выгрузить и перезагрузить DLL.При перезагрузке глобальные переменные должны быть сброшены.Под окнами происходит задержка загрузки и выгрузки.Я никогда не использовал это;но это может помочь.

См. http://msdn.microsoft.com/en-us/library/96c1b5cf.aspx

1 голос
/ 16 июня 2011

Мое предложение было бы реализовать «ядро» библиотеки как DLL. Публичный интерфейс библиотеки должен быть чем-то отдельным (DLL или статическая библиотека - это не имеет большого значения). Когда библиотека должна быть инициализирована, загрузите часть DLL. Когда библиотеку нужно деинициализировать, выгрузите ее.

Таким образом, последовательность, которая «сбрасывает» библиотеку, будет деинициализирована, а затем инициализирована, что приведет к выгрузке / перезагрузке набора операций.

Единственной другой работой будет реализация тонких оболочек, которые используют GetProcAddress() и указатели функций вокруг точек входа в реализацию DLL.

0 голосов
/ 16 июня 2011

Не нужно писать что-то, что вручную сбрасывает каждую глобальную переменную

Это путь.

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