ATL 7 где DllMain

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
AlexDav
Сообщения: 34
Зарегистрирован: 18 окт 2005, 15:37

03 ноя 2005, 10:58

Может кто знает где искать DllMain в ATL 7.0
А то смотрю в глобальных функциях есть а когда пытаешься открыть
программа выкидывает тебя в

Код: Выделить всё

DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )
а то надо туда код добавить - а куда???

Пробовал добавить в файл

Код: Выделить всё

extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
	{
		if (dwReason == DLL_PROCESS_ATTACH)
		{
			TCHAR pszGetMod[MAX_PATH];
			GetModuleFileName(NULL, pszGetMod, MAX_PATH);
			_tcslwr(pszGetMod);
			if(_tcsstr(pszGetMod, _T("explorer.exe")))
				return FALSE;
		}
		return S_OK;
}
лезет ошибка

Код: Выделить всё

Error	1	error LNK2005: _DllMain@12 already defined in LockNet.obj	mfcs80ud.lib
Error	2	fatal error LNK1169: one or more multiply defined symbols found	c:\LockNet\Debug\LockNet.dll
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

03 ноя 2005, 11:44

Попробуй найти, где у тебя дефайнится REGISTER_PROXY_DLL (в проекте, в StdAfx.h или ещё где-нить) и убери этот дафайн. После этого тебе надо самому писать DllMain, DllRegisterServer и DllUnegisterServer.
В обычном ATL проекте это выглядит так -

Код: Выделить всё

extern "C"
BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		_Module.Init(ObjectMap, (HINSTANCE)hInstance);
#ifndef UNDER_CE
		DisableThreadLibraryCalls((HINSTANCE)hInstance);
#endif
	}
	else if (dwReason == DLL_PROCESS_DETACH)
		_Module.Term();
	return TRUE;    // ok
}
/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
	return _Module.GetClassObject(rclsid, riid, ppv);
}

/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry

STDAPI DllRegisterServer(void)
{
	// registers object, typelib and all interfaces in typelib
	return _Module.RegisterServer(TRUE);
}

AlexDav
Сообщения: 34
Зарегистрирован: 18 окт 2005, 15:37

03 ноя 2005, 12:47

Нет у меня такого REGISTER_PROXY_DLL вообще нигда,
а функции DllRegisterServer и DllUnegisterServer объявлены, а вот DllMain нет. :cry:
Ну п-о-м-о-г-и-т-е!!!!! :cry:
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

06 ноя 2005, 07:51

Вот тебе ответ короче это баг VS 2005. Если пришлешь код может смогу разобраться.
AlexDav
Сообщения: 34
Зарегистрирован: 18 окт 2005, 15:37

07 ноя 2005, 13:34

Вот блин - гады американцы!!!
А тебе, ястреб, спасибо - молодец! А главное агрументированно :) )
Ответить