|
1. Most compilers don't support the export so you really need the definition of a template class in with it's declaration of you can't use the template class with arbitrary type parameters. The main impact of having everything in an h file is that it couples the class in the h file more tightly with your code. FREX if the implementation of std::vector changes everything that includes vector has to be recompiled. If export was supported you'd just need to compile vector.cpp and relink (and maybe do that intermediate step thing that EDG does when using exported templates) which would be a lot faster.
2. In addition to your comments the main problem is again dependencies. When you modify your class implementation (if it's all in an h file) you have to recompile ALL the source files that use that class. This can increase build times through the roof for a simple change.
Incidentally recursion would still be possible - a clever compiler could convert your inlined recursion into iteration.
Cheers,
Ash
|
|
|
|
|
thanks Aescleal
|
|
|
|
|
Hello,
I was devolopping a simple COM ATL Server project and when i tried to register the dll it shows me an error with 0x8007007e and telling me the file was found but can't register it.
How could i fix this prob ? All my attempts creating and recrating the projects seems to fail due to that error.
Thank you
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
check that all needed dlls are reachable for the dll. Often it is an debug dll.
Dependency Walker takes that job for me.
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
Ok i opened my dll with that tool, it told me that i have 2 dlls module hnot found which are ieframe.dll and shlwapi.dll but when i opened the windows\system32 i found those dlls existing so i think that there's sth going wrong and related to Dll Hell
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
Re,
i do install IE8 and all seem going well on Dependency walker but my project still refuse to register the COM's Dll
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
i got no clue, other than Dep Walker, or you mus try an fresh installed Windows to proof that your PC hasnt an defect.
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
I'm using Visual Studio 6.0 under Windows Server 2008 besides i have MSV2005 installed too. so maybe it's due to multiple IDE Framework.
But when i create a new blank ATL COM project and i compile it then Try to register the DLL some times it works but when i add a new ATL Object it don't wanna go.
As u said may be i have to reinstall my OS and use one MVS.
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
"s but when i add a new ATL Object it don't wanna go. " looks like dll hell.
You better get rid of the good old VS 6
Deinstall both VS and reinstall only VS2005.
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
Maybe ask on the COM[^] message board too, in case you haven't yet.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Computers are evil, EVIL i tell you!! <
|
|
|
|
|
i'm trying to make a new one under the MVS6.0 on another computer (Win 2003 + MVS 6.0) i hope that it ll work.
I posted a message on the COM Board..; ... please wait
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
Ok here some news,
i compiled my project under wind2003 with MVS6.0 only installed and it works, no error message like Error DllServer. All is green and i'm happy .
But may be the question how could we fix the prob of DllRegister under a PC with more than 1 MVS installed.
"The Ultimate Limit Is Only Your Imagination."
|
|
|
|
|
hi,
i am having a service running in vista. it captures the information of the USB devices that are being used in the system.
i am registering for device notification when starting the service using the RegisterDeviceNotification API, however the service is crashing when i am calling UnregisterDeviceNotification API
Pasting the piece of code below....if needed i would also give the values out of debugging.
please could i get some help or hints as to why my service is crashing when i am calling UnregisterDeviceNotification ?
DWORD WINAPI service_ctrl(DWORD dwCtrlCode,DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
{
PDEV_BROADCAST_HDR head = (PDEV_BROADCAST_HDR )lpEventData;
switch (dwCtrlCode)
{
case SERVICE_CONTROL_DEVICEEVENT:
if (dwEventType == DBT_DEVICEQUERYREMOVE)
{
if(head->dbch_devicetype == DBT_DEVTYP_HANDLE)
{
PDEV_BROADCAST_HANDLE db = (PDEV_BROADCAST_HANDLE) head;
DebugLog("Remove Query");
ht_pIter = handleThread.find(db->dbch_handle);
if ( ht_pIter == handleThread.end( ) )
DebugLog("cannot find Thread ID using Handle Value ");
else
{
killThreadFunc(ht_pIter->second.threadHandle,ht_pIter->second.threadID);
DebugLog("after killThreadFunc");
if(!CloseHandle(db->dbch_handle))
{
DebugLog("Problem in Closing Directory Handle.");
}
char error[50] = {0};
if(!UnregisterDeviceNotification(*ht_pIter->second.devNotify))
{
DebugLog("Problem in Unregistering Device notification.");
sprintf(error,"Error Code returned is %d",GetLastError());
DebugLog(error);
}
handleThread.erase(db->dbch_handle);
DebugLog("Thread Terminate Successful");
}
}
return NO_ERROR;
}
break;
}
}
|
|
|
|
|
Why the dereference of the structure field? *ht_pIter->second.devNotify looks a bit suspect - generally you deal with handles not pointers to handles.
Cheers,
Ash
|
|
|
|
|
...and the errors are not in my code
C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxwin2.inl(362): error C2039: 'NotifyWinEvent' : is not a member of '`global namespace''
C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxwin2.inl(362): error C2660: 'CWnd::NotifyWinEvent' : function does not take 4 arguments
I do not call NotifyWinEvent directly. I have tried to #ifdef out most of the code but still get this error. Module compiles fine in VC++6.0 release/debug, VS2005 release/debug win32/x64, VS2010 debug win32/x64, but fails as above in VS2010 release win32/x64.
I am using default settings to build everything.
ES
|
|
|
|
|
Check the MFC and ATL settings in your Project.
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
I have the same problem.
What can be wrong with MFC and ATL settings?
|
|
|
|
|
compare the settings in debug and release configs
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
I had a series of #ifdef that were somehow impeding the compilation, There must be a conflict, but it does not explain differences between release and debug. Disabling these, as below, fixes the problem
#if 0
// Allow use of features specific to Windows 95 and Windows NT 4 or later.
#ifndef WINVER
#define WINVER 0x0400
#endif
// Allow use of features specific to Windows NT 4 or later.
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
// Allow use of features specific to Windows 98 or later.
#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0x0410
#endif
ES
// Allow use of features specific to IE 4.0 or later.
#ifndef _WIN32_IE
#define _WIN32_IE 0x0400
#endif
#endif
|
|
|
|
|
// Allow use of features specific to Windows 95 and Windows NT 4 or later.
#ifndef WINVER
#define WINVER 0x0500 <----------------- CHANGE HERE from 0x0400 to 0x0500 TO FIX PROBLEM
#endif
|
|
|
|
|
I had the same problem and changing the WINVER in stdafx worked for me.
|
|
|
|
|
|
Hi, how to differentiate a floppy drive and a USB drive in VC++ , i used GetDriveType and both have REMOVABLE property , and can some one explain how exactly to use "SetupDiGetDeviceRegistryProperty" to determine whether it's USB or FLOPPY
|
|
|
|
|
This[^] thread might help.
|
|
|
|
|
you could also use windows registry entry and settings to fetch values for hardware devices.
|
|
|
|