Трудно объяснить нашу ситуацию.
У нас есть 3-х уровневое приложение. Движок - это DLL, написанная на C ++, затем у нас есть VX6 ActiveX EXE, который обращается к движку через вызовы API, а на верхнем уровне у нас есть надстройка Excel (в C # с использованием инфраструктуры VSTO), вызывающая средний уровень с помощью DLL взаимодействия. , В это время каждое «подключение» от Addin к движку создает новый EXE (VB6 использует вызовы API для доступа к движку), и все работает нормально.
Теперь мы перемещаем средний уровень в .NET, он работает «предположительно» нормально (он проходит все наши юнит-тесты), но мы обнаружили ошибку, когда открываем 2 «соединения» одновременно (ups, ни один юнит-тест не проверяет эту ситуацию) потому что это новое поведение). В DLL есть статические объекты, которые используются всеми экземплярами одного и того же процесса, и мы взаимодействуем между «соединениями». В нашей старой версии каждое «соединение» создает новый EXE-файл без разделения памяти между процессами, теперь это один и тот же процесс, и они совместно используют память и статические объекты.
Следуя подсказкам , этот вопрос . Мы пытались собрать COM EXE в C #, чтобы сделать объекты вне процесса на среднем уровне, но у нас тот же результат. Они разделяют статические объекты, в конце каждое соединение не создает независимый процесс.
Понятно, но в настоящее время это недопустимо, перемещая вызовы API в ATL или изменяя статические объекты на инстанцируемые ссылки с дескриптором и изменяя все вызовы API, чтобы получить / установить эти обработчики. Я рассмотрел все примеры в MS All-in-one , но не нашел решения. Также невозможно сохранить только одно соединение за раз, каждая книга может иметь одно соединение, и в будущем мы хотим исследовать веб-приложение с несколькими соединениями одновременно.
Есть предложения?
Заранее спасибо,