PDA

Просмотр полной версии : ATL 7 где DllMain



AlexDav
03.11.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
03.11.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
03.11.2005, 12:47
Нет у меня такого REGISTER_PROXY_DLL вообще нигда,
а функции DllRegisterServer и DllUnegisterServer объявлены, а вот DllMain нет. :cry:
Ну п-о-м-о-г-и-т-е!!!!! :cry:

Hawk
06.11.2005, 07:51
Вот тебе ответ (http://forums.microsoft.com/msdn/showpost.aspx?postid=12350&siteid=1) короче это баг VS 2005. Если пришлешь код может смогу разобраться.

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