|
Hello everyone,
In the following segment, it does not compile because const is qualified on (the whole) type int& not on the near one int, right?
using namespace std;
typedef const int& rcInt;
typedef int& int_ref_t;
int main()
{
rcInt ref = 0;
const int_ref_t x = 0;
return 0;
}
thanks in advance,
George
|
|
|
|
|
George_George wrote: it does not compile because const is qualified on (the whole) type int& not on the near one int, right?
yes,
|
|
|
|
|
Thanks Rajkumar!
My question is answered.
regards,
George
|
|
|
|
|
No,
U are getting error not beacuse of "const", but as it is reference variable.
Does answer make sense????
Prasanth M V
|
|
|
|
|
Thanks Prasanth!
My question is answered.
regards,
George
|
|
|
|
|
so got 2 accepted answers YES aand NO
|
|
|
|
|
Thanks Rajkumar,
Both of them are correct.
regards,
George
|
|
|
|
|
George_George wrote: it does not compile because const is qualified on (the whole) type int& not on the near one int, right?
his question,
rcInt ref = 0;
const int_ref_t x = 0;
both evaluates to a reading const int &x = 0; then how compiler interprets
Prasanth M V wrote: U are getting error not beacuse of "const", but as it is reference variable.
how about rcInt ref = 0; it is also a reference variable.
how the error because of reference variable came here, because in the expression,
const int_ref_t x, const qualifier on reference type (int_ref_t) is ignored and x become the type int &. while compiler interprets rcInt ref = 0, as reference variable of type const int.
|
|
|
|
|
Hi Raj,
I understood from his question that whether "const int_ref_t x = 0; " became error.
int_ref_t x is equivalnet to int& x. Am i right?
Then it will end with error. Does my expalnation make sese??
Thanks
Prasanth M V
|
|
|
|
|
Prasanth M V wrote: I understood from his question that whether "const int_ref_t x = 0; " became error.
No, its not "whether", he know there is a compilation error, his question is whether this is because const is qualified on ( int & ) type, while in the previous statement const is qualified on (int) of reference variable &x.
george_george wrote: In the following segment, it does not compile because const is qualified on (the whole) type int& not on the near one int, right?
Prasanth M V wrote: Does my expalnation make sese??
then what ur "NO" means, does he is not correct that const is qualified on type (int &)
|
|
|
|
|
OK.
Sorry if my statement milead you.
What i meant is that the error is beacause of reference variable, not by const.
Thanks
Prasanth M V
|
|
|
|
|
We use VC++ 6.0 for many years, and now here is VC++ 2005 and comming or arived VC++ 2008. Now the main issue is, how to write your code which will run on VC++ 6.0 and VC ++ 2005, yes I mean the new CRT security features.
see the function that you need to write:
strcpy, wcscpy, mbscpy, _tcscpy, _tcscpy_s. Now, somebody will say that just disable the warning and go ahead. But my question is...
Is There any way that you can write the code which will run equally on VC 6.0 and 2005, I mean w/o much effort, do not ask me to write all that predefined macros, like #if VCPP2005 then this and then that?
Why can not compiler decide that this code is for 2005 and this is for the lower version?
Any good answer??? I mean to Chris Maunder.
Thanks.
|
|
|
|
|
IMHO, the best way to do this is to create #define s that kick in when you are building is VC++6.0 that point back to the older versions of the SDK functions.
For example:
#if _MSC_VER <= 1200
#define _tcscpy_s( D, BS, S ) _tcscpy( D, S );
#endif Something like that will work, but you may get warnings about unused parameters.
This is not that hard to do, because you can find the include file that #define s the TCHAR -variants of the secure versions of the string handling functions and use it to make things easier.
Peace!
-=- James Please rate this message - let me know if I helped or not!<hr></hr> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Hi Experts,
I am trying to get the files and folders name from RecycleBin. But the statement "hr = m_pRecycleBin->CreateViewObject (m_hWnd, IID_IShellDetails, (VOID**)&pDetails);" is returning E_NOINTERFACE.
I could not know what is happening?
My code is:
<br />
CoInitialize(NULL);<br />
<br />
HMODULE m_hShell32 = LoadLibrary(_T("SHELL32.DLL"));<br />
typedef IShellFolder FAR* LPSHELLFOLDER;<br />
typedef IShellFolder2 FAR* PSHELLDETAILS;<br />
LPSHELLFOLDER m_pRecycleBin;<br />
<br />
<br />
<br />
BOOL bReturn = FALSE;<br />
STRRET strRet;<br />
LPMALLOC pMalloc = NULL;<br />
LPSHELLFOLDER pDesktop = NULL;<br />
LPITEMIDLIST pidlRecycleBin = NULL;<br />
HRESULT hr = S_OK;<br />
m_pRecycleBin=NULL;<br />
SHGetMalloc(&pMalloc);
hr = SHGetDesktopFolder(&pDesktop);<br />
hr = SHGetSpecialFolderLocation (m_hWnd, CSIDL_BITBUCKET, &pidlRecycleBin);<br />
if (NULL != m_pRecycleBin)<br />
{<br />
m_pRecycleBin->Release ();<br />
m_pRecycleBin = NULL;<br />
}<br />
hr = pDesktop->BindToObject(pidlRecycleBin, NULL, IID_IShellFolder, (LPVOID *)&m_pRecycleBin);<br />
if (SUCCEEDED (hr))<br />
{<br />
bReturn = TRUE;<br />
}<br />
if (S_OK == pDesktop->GetDisplayNameOf (pidlRecycleBin, SHGDN_NORMAL, &strRet))<br />
{<br />
GetName (strRet);<br />
}<br />
<br />
pMalloc->Free (pidlRecycleBin);<br />
pDesktop->Release();<br />
pMalloc->Release();<br />
<br />
PSHELLDETAILS pDetails = NULL;<br />
<br />
SHGetMalloc(&pMalloc);
hr = m_pRecycleBin->CreateViewObject (m_hWnd, IID_IShellDetails, (VOID**)&pDetails);<br />
if (SUCCEEDED (hr))<br />
{<br />
TCHAR szTemp[MAX_PATH];<br />
SHELLDETAILS sd;<br />
int iSubItem = 0;<br />
<br />
while (SUCCEEDED (hr))<br />
{<br />
hr = pDetails->GetDetailsOf (NULL , iSubItem, &sd);<br />
if (SUCCEEDED (hr))<br />
{<br />
switch (sd.str.uType)<br />
{<br />
case STRRET_CSTR:<br />
_tcscpy (szTemp, sd.str.cStr);<br />
break;<br />
case STRRET_OFFSET:<br />
break;<br />
case STRRET_WSTR:<br />
WideCharToMultiByte (CP_ACP, 0, sd.str.pOleStr, -1, szTemp, sizeof (szTemp), NULL, NULL);<br />
pMalloc->Free (sd.str.pOleStr);<br />
break;<br />
}<br />
iSubItem ++;<br />
}<br />
}<br />
}<br />
if (NULL != pDetails)<br />
{<br />
pMalloc->Free (pDetails);<br />
}<br />
pMalloc->Release();<br />
<br />
|
|
|
|
|
pther wrote:
typedef IShellFolder2 FAR* PSHELLDETAILS;
...
PSHELLDETAILS pDetails = NULL;
hr = m_pRecycleBin->CreateViewObject (m_hWnd, IID_IShellDetails, (VOID**)&pDetails);
type is IShellFolder2 and query for IID_IShellDetails, although this is not the error, returning E_NOINTERFACE means the interface is not supported by the object,
looking into IShellDetails, gives the information, IShellDetails is superseeded by
IShellFolder2 in newer version of windows,
change to
hr = m_pRecycleBin->CreateViewObject (m_hWnd, IID_IShellFolder2, (VOID**)&pDetails); that make sense to the type u defined
|
|
|
|
|
I tried with "hr = m_pRecycleBin->CreateViewObject (m_hWnd, IID_IShellFolder2, (VOID**)&pDetails);"
But problem is remain same.
It is also returning E_NOINTERFACE.
|
|
|
|
|
What is the "scope" of a mutex? (you know, when preventing multiple instances)
Is it "active" for multiple users?? i mean, lets say an app creates a Mutex to mark it's residency....if a second user executes an app...and it attempts to "OpenMutex()" is it successfull??
Also What's the Scope of Atoms??? (across multiple users)
offtopic : how long does it take for an article to be verfied by CP staff?
-st0le [st0le'n'stuff softwarez!]
http://st0lenc0des.googlepages.com/
modified on Tuesday, February 19, 2008 2:13 AM
modified 20-Oct-19 21:02pm.
|
|
|
|
|
I'm no huge expert, but I've just had a look at the documentation for CreateMutex...
Terminal Services: The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session name space. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Name Spaces.
Windows XP: Fast user switching is implemented using Terminal Services sessions. The first user to log on uses session 0, the next user to log on uses session 1, and so on. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.
So, I'd guess you need to put Global\ in front of a mutex name for the same one to be accessed (and there used) by differing processes from differing users.
If you look online for the documentation, I'm sure you can see how they work for Vista too - but I'd be surprised if it's different.
As for atoms? They're all around us, maaaaaaaan. (OK, I don't know, but I imagine it's in MSDN too)
OT: Mine took ~2 weeks, but that wasn't recent.
Iain.
Iain Clarke appearing in spite of being begged not to by CPallini.
|
|
|
|
|
Hello everyone,
1.
After my study, the address of IAT of an executable is known at compile/link time, other than known at load/runtime, right?
I have this confusion because if an EXE needs to link with an import library, some of the instructions in the import library contains pointers to the address to the IAT entries of the EXE (right?) which needs to be fixed-up during load time. So, if IAT address is not known at compile/link time, import library will not be able to contain pointers to the address of IAT.
2.
IAT address of an EXE is some default address which has the same values for all EXE?
thanks in advance,
George
|
|
|
|
|
So, if IAT address is not known at compile/link time, import library Lookup Table will not be able to contain pointers to the address of IAT.
Yes. That is true...but certain programs (like viruses,exe protected files) can "build" (or rather fill) their Import Table by themselves...The IAT is sometimes "purposely" corrupted ...it used to be some kind of anti-disassembly trick. (i doubt if it works anymore...)
IAT address of an EXE is some default address which has the same values for all EXE?
No, It does not have a fixed addr...You can grab the RVA (Relative Virtual Address) from the PE Header...For the Physical Address you'll need to convert RVA into Physical Address.
-st0le [st0le'n'stuff softwarez!]
http://st0lenc0des.googlepages.com/
modified on Tuesday, February 19, 2008 2:34 AM
modified 20-Oct-19 21:02pm.
|
|
|
|
|
Thanks st0le,
My question is answered.
regards,
George
|
|
|
|
|
I dont know if this is the right forum to post this message... if not please pardon me..
I need to register an OCX which i got from the net. used Regsvr32 to register it. but if failed to register. it was goveong me an error
something like this
DllRegisterServer c:\windows\myocx.ocx failed
return code was :0x80004005\
what needs to be done to register it?
thanks
|
|
|
|
|
Are you logged on as an administrator?
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
No. i guess i need to have admin rights to register an OCX.. right?
Thanks.. Guess the query is resolved
|
|
|
|
|
At first, you need to be an administrator or power user to register a component with DLLRegisterServer . But don't yet decide your query is resolved. It could have failed for other reasons too.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|