Страница 1 из 1

ATL 7 где DllMain

Добавлено: 03 ноя 2005, 10:58
AlexDav
Может кто знает где искать 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

Добавлено: 03 ноя 2005, 11:44
Hawk
Попробуй найти, где у тебя дефайнится 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);
}


Помогите-е-е!!!

Добавлено: 03 ноя 2005, 12:47
AlexDav
Нет у меня такого REGISTER_PROXY_DLL вообще нигда,
а функции DllRegisterServer и DllUnegisterServer объявлены, а вот DllMain нет. :cry:
Ну п-о-м-о-г-и-т-е!!!!! :cry:

Добавлено: 06 ноя 2005, 07:51
Hawk
Вот тебе ответ короче это баг VS 2005. Если пришлешь код может смогу разобраться.

Добавлено: 07 ноя 2005, 13:34
AlexDav
Вот блин - гады американцы!!!
А тебе, ястреб, спасибо - молодец! А главное агрументированно :) )