Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / COM DLL как загрузить / 12 сообщений из 12, страница 1 из 1
24.08.2004, 12:54
    #32662829
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
Суть вопроса вот в чем создаю я COM - inProc DLL в Vstudio6 без мастеров
создал получил dll зарегил его в реестре, пишу код который этот com использует

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
 // {3ED0ACD0-785E-4462-A554-FCB610E6880F} 

DEFINE_GUID(IID_ICalculator, 
0x3ed0acd0, 0x785e, 0x4462, 0xa5, 0x54, 0xfc, 0xb6, 0x10, 0xe6, 0x88, 0xf);

 // {52DD602C-0A9D-4328-B72D-3889402504DA} 
DEFINE_GUID(CLSID_CoClassCalculator, 
0x52dd602c, 0xa9d, 0x4328, 0xb7, 0x2d, 0x38, 0x89, 0x40, 0x25, 0x4, 0xda);

typedef HRESULT  (__fastcall *DLLGet) (
  REFCLSID rclsid,
  DWORD dwClsContext,
  COSERVERINFO * pServerInfo,
  REFIID riid,
  LPVOID * ppv
);

int main(int argc, char* argv[])
{
	HRESULT hrinit = CoInitialize (NULL);
	assert (hrinit == S_OK);

	ICalculator * pointee;
	HINSTANCE lib = CoLoadLibrary (L"H:\\docs_xp\\Visual Studio Projects\\com_calculator\\Debug\\com_calculator.dll" , TRUE);
	assert (lib);
	void * pfoo = GetProcAddress (lib , "DllGetClassObject");
	assert (pfoo);
	DLLGet get = (DLLGet)pfoo;

	HRESULT hr = get (CLSID_CoClassCalculator , 
		CLSCTX_INPROC_SERVER,  0 , IID_ICalculator, (void **) & pointee);

	 //HRESULT hr = CoGetClassObject (CLSID_CoClassCalculator ,  
	 //	CLSCTX_INPROC_SERVER, 0, IID_ICalculator, (void **) & pointee); 

	if (SUCCEEDED(hr)){
		printf ("OK");
	}
	else
		printf ("Failed");

	CoUninitialize ();
	return  0 ;
}


Обратите внимание на закоментаренный фрагмент - он - рекомендованный в MSDN не работает, а вот когда я руками загрузил библиотеку и вызвал метод - все пучком.
неработа заключается в том, что dll загружается (проверено, я понавсталял кучу отладочных месагабоксов, вызывается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
STDAPI DllGetClassObject (REFCLSID rclsid , REFIID riid, LPVOID * ppv){
	if (rclsid != CLSID_CoClassCalculator)
		return CLASS_E_CLASSNOTAVAILABLE;
	CoClassCalculator * cocalc = new CoClassCalculator ();
	HRESULT hr = cocalc->QueryInterface (riid, ppv);
	if (FAILED (hr) ){
		delete cocalc;
	}
	return hr;
}
Но при возврате (на последней строке) срабатывает Access Violation

В чем глюк может быть?
...
Рейтинг: 0 / 0
24.08.2004, 13:01
    #32662847
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
Интерестно , а ты с СОМ как с обычной DLL работаешь чтоль ?


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
24.08.2004, 13:32
    #32662936
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
Ну вообще общего между com-inproc com і обычной dll очень много

авторИнтерестно , а ты с СОМ как с обычной DLL работаешь чтоль ?

а вопрос то к чему?
...
Рейтинг: 0 / 0
24.08.2004, 13:47
    #32662985
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
black zorroНу вообще общего между com-inproc com і обычной dll очень много

авторИнтерестно , а ты с СОМ как с обычной DLL работаешь чтоль ?

а вопрос то к чему?

ну незнама ,
есть пару примеров может на что наведут .
...
Рейтинг: 0 / 0
24.08.2004, 13:48
    #32662986
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
25.08.2004, 08:23
    #32663985
Mr.Buba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
не парся, сделай все визардом, код будет рабочий и глюков не будет. Ну или сделай визардом то же самое и сравни код с оригиналом
...
Рейтинг: 0 / 0
25.08.2004, 10:18
    #32664154
Siebentework
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
А кто-нить делал АктивыХ без MFC на чистых Апях?

Трудно это?
Просто скоро может понадобиться...
...
Рейтинг: 0 / 0
25.08.2004, 12:32
    #32664502
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
SiebenteworkА кто-нить делал АктивыХ без MFC на чистых Апях?

Трудно это?
Просто скоро может понадобиться...

А вот я же бросил примеры ...
можешь взглянуть .
...
Рейтинг: 0 / 0
25.08.2004, 14:25
    #32664831
Mr.Buba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
SiebenteworkА кто-нить делал АктивыХ без MFC на чистых Апях?

Трудно это?
Просто скоро может понадобиться...

а ты и не будешь пользоваться MFC, будешь использовать WTL - те же яйца только сбоку :)
...
Рейтинг: 0 / 0
25.08.2004, 15:00
    #32664969
Seiben
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
автора ты и не будешь пользоваться MFC, будешь использовать WTL

Это чё? Примеры на WTL построены?? Я сроду ATL не использовал...(не, ну было один раз по-молодости...)

Ок, ладно пойду-гляну. Если чё - буду задавать вопрос второй раз :)
...
Рейтинг: 0 / 0
26.08.2004, 07:19
    #32665838
Mr.Buba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
Seiben
Это чё? Примеры на WTL построены?? Я сроду ATL не использовал...(не, ну


http://sourceforge.net/projects/wtl/
...
Рейтинг: 0 / 0
27.08.2004, 13:29
    #32668802
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM DLL как загрузить
В общем я поборол все это чудо, ошибка оказалась довольно дибильная
я забыл указать __stdcall при декларации методов моего интерфейса.

и еще вопрос в догонку в дельфе когда я выполняю Import TypeLib дельфа слетает от моего TLB файла аргументируя ошибку в реестре, когда я пробую тоже но от имени админа, то все путем, фишка в том, что я не могу работать от имени администратора, и это создает некоторые трудности, не подскажет ли кто что дельфе нужно при этом импорте я считал что она просто генерит файл с обертками и больше ничего, или я не прав.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / COM DLL как загрузить / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]