Как мне сделать COM-суррогатный множественный экземпляр? - PullRequest
0 голосов
/ 30 января 2019

У меня есть 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-битном exe при вызове CoCreateInstance.

Из некоторых поисков Google кажется, что решение моей проблемы должно включать ключ REGCLS_SINGLEUSE из перечисления REGCLS .Тем не менее, я не вижу, где поставить этот ключ.Также отмечу, что в этом перечислении есть отдельный ключ REGCLS_SURROGATE .Надеюсь, это не означает, что DLL суррогатное и одноразовое использование являются взаимоисключающими!

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

...