Когда мы создаем фильтр DirectShow и регистрируем его, статические переменные / функции совместно используются в нескольких экземплярах одного и того же фильтра.Я считаю, что это относится и к другим элементам управления ActiveX.Например, если я пытаюсь использовать что-то вроде:
static int counter = 0;
void someFunction() {
counter++;
// trace result here
}
Если я запускаю другой экземпляр того же фильтра, второй экземпляр начинается не с 0, а там, где остался первый счетчик экземпляров.И затем они начинают асинхронно увеличивать один и тот же счетчик.
Мой вопрос: есть ли какой-нибудь разумный способ заблокировать совместное использование статических переменных для фильтров DirectShow?Это может показаться глупым, но если мы зарегистрируем один и тот же фильтр с другим GUID (путем перекомпиляции одного и того же проекта с другим GUID и выходным файлом), статические переменные больше не будут использоваться совместно, потому что это два разных фильтра, верно?Итак, есть ли способ, которым я могу смоделировать это, используя тот же фильтр, но сохраняя статику?
Что я пытаюсь сделать, это использовать библиотеку со многими статическими использованиями в ней.Избавиться от всех статических переменных / функций очень сложно.библиотека, которую я пытаюсь использовать, использует старые стандарты, такие как Ansi C, и не имеет реального объектно-ориентированного дизайна.Итак, инкапсуляция не очень проста.Большинство функций находятся в глобальном пространстве, а не в классах.Пожалуйста, имейте это в виду.Если я оставлю статику такой, какая есть, один экземпляр фильтра будет работать нормально, но другие экземпляры начнут портиться из-за общих (статических) переменных.