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

CoCreateInstance проблема   Найти похожие ветки 

← →
dumb   (2002-11-01 12:10) [0]

Господа, следующий код работает по-разному в EXE приложении и DLL.


uses Classes, SysUtils, ActiveX, Windows, ComObj;

...

CoInitialize(nil);
hr := CoCreateInstance(CLSID_APPKRNL, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IID_IAPP, pIAPP);
if Failed(hr) then
goto suck;


В EXE все работает просто замечательно, но в DLL Failed(hr) возвращает истину. Может проблема с пермиссиями? Если да, то где их можно правильно установить?

Спасибо,
dumb


← →
Marcus   (2002-11-01 12:26) [1]

Для DLL нужно CLSCTX_INPROC_HANDLER


← →
dumb   (2002-11-01 13:09) [2]

2Marcus. Вот еще что выяснилось. На некоторых машинах DLL все таки работает. Чего же остальным то не хватает?? (пробую CLSCTX_INPROC_HANDLER)


← →
Marcus   (2002-11-01 14:11) [3]

Возможно проблема в настройках секьюрити COM/DCOM. Попробуй в dcomcnfg.exe дать полный доступ к нужному COM-объекту


← →
dumb   (2002-11-01 19:46) [4]

CLSCTX_INPROC_HANDLER не помог. И почему-то я не могу найти тот компонент в списке, когда использую утилиту dcomcnfg.exe.
Еще идеи?


← →
dumb   (2002-11-01 23:39) [5]

Еще одна деталь - все машины на которых DLL не работает - W2K. На всех XP работает.


← →
dumb   (2002-11-02 14:09) [6]

HELP!


← →
Marcus   (2002-11-04 11:52) [7]

Фиг его знает, товарищ майор. Сапоги резиновые - собака след не взяла...
На самом деле нужно более подробно с кодом познакомиться. Так, по одной строчке непонятно. И что собственно возвращает CoCreateInstance (код ошибки)?
Можешь еще попробовать CoInitializeEx(nil, COINIT_MULTITHREADED or COINIT_APARTMENTTHREADED)


← →
dumb   (2002-11-06 14:14) [8]

Возвращается E_NOINTERFACE, но это же бред?! EXEшник-то работает!
CoInitializeEx(nil, COINIT_MULTITHREADED or COINIT_APARTMENTTHREADED) не возымел эффекта.


← →
Marcus   (2002-11-06 14:30) [9]

Понимаешь, экзешник сам себя регистрит (свои COM-объекты) при запуске, а DLL требует явной регистрации regsvr32.exe yourdll.dll. Может в этом дело ? Судя по коду ошибки, какой-то из COM-объектов остался не прописанным в реестре.


← →
dumb   (2002-11-06 15:28) [10]

ОК. Пробую насильно всех зарегистрировать.


← →
dumb   (2002-11-06 16:04) [11]

Не помогло. По-прежнему E_NOINTERFACE.
Если сделать regsvr32 myapp.dll /u, т.е. де-регистрировать сервер, то будет другая ошибка REGDB_E_CLASSNOTREG, т.е. оно все таки что-то там пытается создать.



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

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



Память: 0.47 MB
Время: 0.011 c
4-61872
kostik78ua
2002-11-06 16:45
2002.12.19
Internet Explorer


1-61513
_saha_
2002-12-05 11:00
2002.12.19
Создание класса


14-61835
QUE
2002-11-26 10:22
2002.12.19
Задача монетами


7-61842
Sergey V. Shadrin
2002-09-30 16:02
2002.12.19
как определить запущенная ли программа


3-61419
Shved
2002-11-29 13:47
2002.12.19
В чем беда?




   Наверх