Как загрузить DLL в качестве локального сервера - PullRequest
0 голосов
/ 06 сентября 2010

Мне действительно нужна помощь ...

Я реализовал COM-компонент (i.e A.dll) с IDL, а также закодировал DLL-оболочку (B.dll) для этого компонента. Я реализовал необходимые функции экспорта для DLL «A» и зарегистрировал ее с помощью «regsvr32.exe».

Проблема в том, что у меня есть 3 EXE-файла, которые используют B.dll для доступа к методам A.dll. Но мне не удалось создать локальный сервер для A.dll, поэтому каждый EXE загружает новые A.dll и B.dll. Я хочу загрузить A.dll только один раз, и необходимо реализовать эту функцию в B.dll. Последнее утверждение также открыто для обсуждения.

Однако мне не удалось найти ни одного полезного примера или ресурса по этой проблеме. Любая помощь будет оценена, спасибо заранее.

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

DLL, опосредованная COM, называется внутрипроцессным сервером. Это говорит о вашей проблеме: он всегда будет отображаться в памяти своих клиентов, как и любая другая DLL. Точно так же любые DLL it загрузки будут сопоставлены с исходным процессом. Из вашего вопроса не понятно, почему вы не хотите использовать DLL. Если это необходимо для экономии ресурсов, тогда учтите, что дублируются только данные; код будет загружен только один раз. Если это потому, что вы хотите, чтобы они обменивались данными, подумайте об использовании общей памяти. Если вы действительно хотите, чтобы все три .exe-файла обслуживались экземпляром, то вам нужен локальный COM-сервер, который будет реализован .exe, а не .dll.

1 голос
/ 06 сентября 2010

Нет такой вещи как "создать локальный сервер".Сервер In-proc должен быть загружен в каждый потребительский процесс, это невозможно обойти - каждый потребитель является отдельным процессом, поэтому он имеет свою собственную копию кода и данных.выполнение кода COM-сервера для всех потребителей, для создания которых требуется создать сервер out-proc.Для этого вы можете либо реинжинирировать свой COM-сервер, либо попробовать использовать приложение COM + server.Таким образом, вы можете создать отдельный процесс, выполняющий код COM-сервера, к которому могут подключиться несколько потребителей.

...