Как мне сделать 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 являются взаимоисключающими!

Любые идеи будут приветствоваться.

0 ответов

Другие вопросы по тегам