Вниз
Скачать: CL | DM;

Ком сервер в сервисе.   Найти похожие ветки 

← →
Дмитрий С ©   (2012-10-31 21:32) [0]

Создал, зарегистрировал в реестре:

[HKEY_CLASSES_ROOT\AppID\{914DA410-7FE8-11D2-98FA-204C4F4F5020}]
"LocalService"="SvcWithComServer"

[HKEY_CLASSES_ROOT\CLSID\{914DA413-7FE8-11D2-98FA-204C4F4F5020}]
"AppID"="{914DA410-7FE8-11D2-98FA-204C4F4F5020}"


Работает. Но два вопроса:
1.
 Почему код использования получения объекта работает:
   OleCheck(CoGetClassObject(CLSGUID, CLSCTX_ALL, nil, IClassFactory, Factory));
   OleCheck(Factory.CreateInstance(nil, IDispatch, Obj));

А такой нет:
OleCheck(CoCreateInstance(CLSGUID, nil, CLSCTX_ALL, IDispatch, Obj))
Ошибка: интерфейс не поддерживается. Замена IDispatch на IUnknown ничего не изменила.

2.
Как сделать чтобы вызов CoGetClassObject не приводил к запуску службы, а возвращал ошибку, если служба не запущена.


← →
Дмитрий С ©   (2012-10-31 21:53) [1]

со 2 разобрался.

1 вопрос актуален еще.


← →
Dimka Maslov ©   (2012-10-31 22:03) [2]


> со 2 разобрался.


Нам расскажи, интересно же.


← →
Дмитрий С ©   (2012-10-31 22:09) [3]


> Нам расскажи, интересно же.

Точно.

Для этого в
[HKEY_CLASSES_ROOT\AppID\{914DA410-7FE8-11D2-98FA-204C4F4F5020}]
нужно определить параметр LaunchPermission.
Это можно сделать с помощью, например, dcomcnfg.exe
или самому записать туда DACL


← →
Дмитрий С ©   (2012-11-01 18:37) [4]

с 1 тоже разобрался.
Это было связано с неправильной реализацией метода IClassFactory.CreateInstance.

Было так:

if unkOuter <> nil then
   Exit(CLASS_E_NOAGGREGATION);

 if IsEqualIID(iid, IDispatch) then
   IDispatch(obj) := FConnector
 else
   Exit(E_NOINTERFACE);

 Result := S_OK;


А надо было минимум так:

if unkOuter <> nil then
   Exit(CLASS_E_NOAGGREGATION);

 if IsEqualIID(iid, IDispatch) then
   IDispatch(obj) := FConnector
 else
 if IsEqualGUID(iid, IInterface) then
   IInterface(obj) := FConnector
 else
   Exit(E_NOINTERFACE);

 Result := S_OK;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.049 c
2-1340112867
lavren
2012-06-19 17:34
2013.03.22
Новый пользователь AD


15-1351704720
Дмитрий С
2012-10-31 21:32
2013.03.22
Ком сервер в сервисе.


15-1337747844
Медвежонок Пятачок
2012-05-23 08:37
2013.03.22
Многое здесь было, а этого еще не припомню


15-1351590930
Palladin
2012-10-30 13:55
2013.03.22
Как в директивах препроцессора с# target framework учесть?


2-1343500390
vasa777
2012-07-28 22:33
2013.03.22
скрыть ненужные компоненты из палитры




   Наверх