ATL 7 где DllMain

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: ATL 7 где DllMain

AlexDav » 07 ноя 2005, 13:34

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

Hawk » 06 ноя 2005, 07:51

Вот тебе ответ короче это баг VS 2005. Если пришлешь код может смогу разобраться.

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

AlexDav » 03 ноя 2005, 12:47

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

Hawk » 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);
}

ATL 7 где DllMain

AlexDav » 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

Вернуться к началу