Как мне сделать COM-суррогатный множественный экземпляр?
У меня есть C# 32-битная COM DLL, которая общается с C# 64-битным exe-файлом, используя метод 'DllSurrogate', описанный в разделе Хостинг.NET DLL в качестве внепроцессного COM-сервера (EXE).
Мне нужна эта настройка, потому что 32-битный C# общается с устаревшей 32-битной C++ dll.
Я думал, что все работает нормально, но я только что понял, что при создании второго экземпляра 64-разрядного exe вы не получаете второй процесс "DLL Host" (COM Surrogate). Это не хорошо для моего приложения.
Это приложение для рабочего стола Windows, и мне нужно знать, что если пользователь запускает его несколько раз, все они запускаются в своих собственных отдельных процессах. В противном случае данные в устаревшей dll могут быть повреждены, и они наверняка столкнутся с ограничением памяти 32-разрядного процесса.
Суррогат регистрируется с помощью ключа AppId DllSurrogate.
32-битный экземпляр класса создается в 64-битном исполняемом файле путем вызова CoCreateInstance.
Из некоторого поиска в Google кажется, что решение моей проблемы должно включать ключ REGCLS_SINGLEUSE из перечисления REGCLS. Тем не менее, я не вижу, где поставить этот ключ. Также отмечу, что в этом перечислении есть отдельный ключ REGCLS_SURROGATE. Надеюсь, это не означает, что DLL Surrogate и Single Use являются взаимоисключающими!
Любые идеи будут приветствоваться.