dynamic_cast does not work as specified

VC

    Next

  • 1. BitBlt operation into printer DC causes blue screen under vista
    Hi, I am doing a BitBlt operation into a printer DC, which causes a blue screen under vista. The same operation works perfectly under XP. Any ideas? Thanks a lot, Thomas
  • 2. WndDbg Advise - Location of Source and Symbols
    Having concluded that I need visibility beneath the level of the VC6 IDE debugger, I am engaging in the project of setting up for remote debugging a MFC application using WinDbg. I have connected IEEE 1384 between two Xp SP2 computers, and I have the two computers connected on a simple Windows peer to peer network with file sharing. I would like the Target computer to be the computer with the IDE, source and symbols, and the Host to simply be running WindDbg. Is this realistic? - or is more advisable to contain the IDE, symbols and source on the Host, and use the Target only for program execution? P.S. Yesterday I asked for some assistance on getting Host and Target to cooperate in the Microsoft Communities, VC++ Debugger weblog. In the interest of courtesy, and not wishing to double-post on a question, this question is for general for advise and to discuss pros and cons regarding the location of source and symbols. Thanks!
  • 3. How can I tell if a CEdit is disabled or enabled? Many thanks
    I disabled a CEdit with EnableWindow(false), and it was gray then. When I tried to retrieve state of this CEdit with IsWindowEnabled() but always got false Any ideas?
  • 4. How to use SetWindowsHookEx
    Hi all, I wrote a mouse hook function on app, but it only work when our program was activing, if i focused on another app, then my hook function didn't work more. Any problem? I must write this function in a dll? So it can work on whole system?

dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Tue, 13 Jan 2009 14:18:20 GMT

Here's a problem I hit that is inconsistent with the documentation.

I'm handling an OnUpdate notification, where the CObject* can be one of several types
depending on the value of lHint.

So the code is basically

void CMyView::OnUpdate(CView * pSender, LPARAM lHint, CObject *pHint)
   {
    if(lHint == 0 && pHint == NULL)
       { /* normal update */
        CView::OnUpdate(pSender, lHint, pHint);
        return;
       } /* normal update */

    if(lHint == WHATEVER)
       { /* update the whatever */
        SubThing * p = dynamic_cast<SubThing *>pHint;
        ASSERT(p != NULL);
        if(p != NULL)
            DoSomething(p);
       } /* update the whatever */
    } // CMyView::OnUpdate

where I have defined

class Thing { ... };
class SubThing : public Thing { ... };

If I try to single-step into it, it tries to trace a source file along some bizarre path
for rtti.cpp, but this source is not included in the distribution.  Bummer.

So, I thought, it might have to do with the fact that (due to exceptionally poor design
decisions in the original MFC design) the pHint is declared to be a CObject*, unrelated to
a Thing or SubThing (in a rational world, it would have been an LPVOID).  The line

        SubThing * p = dynamic_cast<SubThing *>pHint;

generates the compile-time diagnostic:
        C2681: 'CObject *': invalid expression type for dynamic_cast

I have no idea why this is an invalid expression for dynamic_cast.  But it may deal with
some obscure, undocumented rule.

But dynamic_cast is defined to work on, among other expressions, a pointer-to-void, so I
tried

        LPVOID ptr = (LPVOID)pHint;
        SubThing * p = dynamic_cast<SubThing *>p;

but that produces an error
        C2681: 'LPVOID': invalid expression type for dynamic_cast

in spite of the documetnation of dynamic_cast, which *clearly* states:

        The type-id must be a pointer or a reference to a previously defined class type or
a "pointer to void". 

It turns out I can get around this by doing

        Thing * ptr = (Thing *)pHint;
        SubThing * p = dynamic_cast<SubThing *>ptr;

So does this represent an error in the documentation, or an error in the implementation?
				joe
Joseph M. Newcomer [MVP]
email:  XXXX@XXXXX.COM 
Web:  http://www.**--****.com/ 
MVP Tips:  http://www.**--****.com/ 

Re: dynamic_cast does not work as specified

Postby Doug Harrison [MVP] » Tue, 13 Jan 2009 15:05:12 GMT

n Mon, 12 Jan 2009 00:18:20 -0500, Joseph M. Newcomer
< XXXX@XXXXX.COM > wrote:


That's not gonna work, because Thing is not derived from CObject. More
generally, CObject appears nowhere in the inheritance graph. You know
beforehand that the dynamic_cast will fail, always.


The documentation is actually a little better than the error message:

http://msdn.microsoft.com/en-us/library/87ea2et5(VS.80).aspx
<q>A casting operator tried to convert from an invalid type.</q>

It's still a little misleading, because the type CObject* is a valid source
type provided CObject is in the inheritance graph for the destination type.
It's an "invalid type" /here/ because it doesn't appear in the inheritance
graph for your type.


If MSDN is referring to the type you're casting to, it's correct. You can
dynamic_cast /to/ void*, in which case, you get a pointer to the "complete
object". You can't cast /from/ void*, though, because there's no way to
know if has any type info attached to it. (Which would be through a pointer
in the vtbl for typical implementations - but dynamic_cast can't know the
object pointed to has a vtbl.)


Maybe the interpretation. :)

--
Doug Harrison
Visual C++ MVP

Re: dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Tue, 13 Jan 2009 18:59:06 GMT

t is not at all clear from the documentation that expression is required to be in the
inheritance chain of type-id (yes, I see now that I can cast to a void*; I'd read it the
other way...)

Consider if I did
SubThing * p = (SubThing*)pHint;
then p is a pointer to an object (ideally) of type SubThing. But I wanted the additional
typecheck to be done to tell me if the thing that is pointed to is of type (SubThing).

What is interesting is that casting to LPVOID makes it work; this points out once again
the horror of OnUpdate/UpdateAllViews using a CObject* instead of an LPVOID. My suspicion
was that since CObject* was not part of the hierarchy it was failing, but the
documentation does not at all make this clear. The phrase at the end

If type-id is a pointer to an unambiguous accessible direct or indirect base class of
expression, a pointer to the unique subobject of type-id is the result

is not stated as a limitation, but what will happen if typeid is a superclass of
expression's type; it does not suggest what happens if typeid is or is not a subclass of
expression's type.

The statement exists

When you use dynamic_cast<typeid>(expression), if expression cannot be safely converted to
type type-id, the run-time check causes the cast to fail.

But in my case, CObject* is a pointer to a type which *is* an object of class Thing, and
in fact an object of class SubThing, just unfortunately disguised as a CObject* due to bad
design (given the pointer is passed transparently from the UpdateAllViews to the OnUpdate
handler, making it other than LPVOID was clearly a design error; in all the years I've
used MFC, I've never passed anything derived from CObject* via this mechanism...but I was
trying to do some "safe casting" here...).

It would be nice to see a more formal description of the semantics of dynamic_cast instead
of the demonstration-by-unreadable-example technique currently used.
joe

On Mon, 12 Jan 2009 00:18:20 -0500, Joseph M. Newcomer < XXXX@XXXXX.COM > wrote:

Joseph M. Newcomer [MVP]
email: XXXX@XXXXX.COM
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm

Re: dynamic_cast does not work as specified

Postby Daniel James » Tue, 13 Jan 2009 21:22:47 GMT





You're spot-on about the poor design decisions.

The error message is telling you that pHint (a CObject *) cannot be up- 
or downcast to a SubThing * ... which is correct because neither one 
inherits from the other (and they're not identical).

If you were to make your class Thing inherit from CObject it would 
work.


Yes (though I'd have used "reinterpret_cast<Thing *>"). The Dynamic 
cast is allowed there because SubThing and Thing are related classes.


The implementation seems to conform to the standard (see 5.2.7 "Dynamic 
cast").

Cheers,
 Daniel.
 



Re: dynamic_cast does not work as specified

Postby Doug Harrison [MVP] » Tue, 13 Jan 2009 22:42:14 GMT

On Mon, 12 Jan 2009 04:59:06 -0500, Joseph M. Newcomer




Was that a rimshot I heard in the distance? :)


Indeed, pHint had better be of a type that can be legally converted to
SubThing* via a C-style cast.


If you want to use dynamic_cast, but you're coming from void*, or T* where
T is a lie, as it in your example where MFC makes you use CObject* as a
generic pointer type, you first have to cast the pointer to a known type
that has RTTI information attached, i.e. a type that has a vtbl, i.e a type
that has a virtual function, the latter being the real requirement. That
initial cast cannot be a dynamic cast. Instead, it must be a /valid/
reinterpret_cast. Then you can dynamic_cast the result of the
reinterpret_cast to another type.


It is rather presumptuous.


You can also perform a cross-cast, e.g. cast between X and Y in this MI
hierarchy:

#include <stdio.h>

struct X { virtual void f() {} };
struct Y {};
struct Z : X, Y {};

int main()
{
   Z z;
   X* p = &z;
   Y* q = dynamic_cast<Y*>(p); // q points to z's Y.
   X x;
   X* r = &x;
   Y* s = dynamic_cast<Y*>(r); // s is set to NULL.

   printf("%p, %p, %p\n",
         (void*) static_cast<Y*>(&z),
         (void*) q,
         (void*) s);
}

X>cl -W4 a.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for
80x86

X>a
0012FF30, 0012FF30, 00000000

That's why I spoke in terms of the "inheritance graph" instead of base and
derived classes.

-- 
Doug Harrison
Visual C++ MVP

Re: dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Wed, 14 Jan 2009 03:01:26 GMT

ee below...
On Mon, 12 Jan 2009 07:42:14 -0600, "Doug Harrison [MVP]" < XXXX@XXXXX.COM > wrote:

****
Indeed, it is; but to avoid the possibility that I'm passing a

class SubOtherThing : public Thing

by mistake, I wanted to use dynamic_cast as an additional check on the type. And yes, due
to an off-by-1-level computation on the structure, I accidentally sent a SubOtherThing* to
my handler and wasted almost half an hour trying to figure out what I'd done wrong...
****
*****
To be more specific

class Thing {
public:
virtual void Show() PURE;
};

class SubThing : public Thing {
public:
virtual void Show();
};

And what you suggested is what I discovered: by casting to a void* I can then cast it
back. (There are actually several virtual methods for class Thing). It was based on the
idea that the documentation, which is confusing at best, did not state explicitly that
type-id must be a derived class of expression [note that the simple explanation could be
done for single-inheritance, then generalized for multiple-inheritance, resulting in a far
more readable description].

I'm also trying to figure out how I could write this more clearly for my Errors and
Omissions document. Stroustrup 3rd edition wasn't much more help, again trying to define
semantics-by-example.
****
*****
Yes, but I'm not using multiple inheritance. So I wasn't worried about the
multiple-inheritance case.
thanks
joe
****
Joseph M. Newcomer [MVP]
email: XXXX@XXXXX.COM
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm

Re: dynamic_cast does not work as specified

Postby Doug Harrison [MVP] » Wed, 14 Jan 2009 08:39:26 GMT

On Mon, 12 Jan 2009 13:01:26 -0500, Joseph M. Newcomer




I always thought it interesting that dynamic_cast has to be able to cruise
up and down the inheritance graph and sort of go sideways in MI cases
searching for a match at runtime. As for defining the operator clearly and
rigorously, that's fairly hard to do. The C++ Standard takes a full page to
do it, 1.5 pages with examples. You're interested in the "run-time check"
aspect, and this is what it says:

5.2.7 Dynamic cast
<q>
8. The run-time check logically executes as follows:
If, in the most derived object pointed (referred) to by v, v points
(refers) to a public base class subobject
of a T object, and if only one object of type T is derived from the
sub-object pointed (referred) to
by v, the result is a pointer (an lvalue referring) to that T object.
Otherwise, if v points (refers) to a public base class sub-object of the
most derived object, and the
type of the most derived object has a base class, of type T, that is
unambiguous and public, the result
is a pointer (an lvalue referring) to the T sub-object of the most derived
object.
Otherwise, the run-time check fails.

Note that this is paragraph 8. There are 7 before it. :) Importantly, for
(8) to apply, v (the operand of the cast) has to be a pointer or reference
to a polymorphic type, i.e. a type that has a virtual function.

-- 
Doug Harrison
Visual C++ MVP

Re: dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Wed, 14 Jan 2009 16:27:27 GMT

Is there a copy of the C++ standard readily available?  The last time I looked it was a
very expensive document.
					joe





>If, in the most derived object pointed (referred) to by v, v points
>>(refers) to a public base class subobject
>>of a T object, and if only one object of type T is derived from the
>>sub-object pointed (referred) to
>>by v, the result is a pointer (an lvalue referring) to that T object.
>>Otherwise, if v points (refers) to a public base class sub-object of the>
>most derived object, and the>
>type of the most derived object has a base class, of type T, that is>
>unambiguous and public, the result>
>is a pointer (an lvalue referring) to the T sub-object of the most derived>
>object.>
>Otherwise, the run-time check fails>
>>/q>
>Note that this is paragraph 8. There are 7 before it. :) Importantly, fo>
>(8) to apply, v (the operand of the cast) has to be a pointer or referenc>
>to a polymorphic type, i.e. a type that has a virtual function.
Joseph M. Newcomer [MVP]
email:  XXXX@XXXXX.COM 
Web:  http://www.**--****.com/ 
MVP Tips:  http://www.**--****.com/ 

Re: dynamic_cast does not work as specified

Postby Doug Harrison [MVP] » Thu, 15 Jan 2009 04:35:47 GMT

On Tue, 13 Jan 2009 02:27:27 -0500, Joseph M. Newcomer




For $30, you can download a .PDF copy here:

 http://www.**--****.com/ %2fISO%2fIEC+14882-2003

-- 
Doug Harrison
Visual C++ MVP

Re: dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Thu, 15 Jan 2009 11:37:56 GMT

Thanks.  That's a reasonable price.  The last time I looked, it was something over $150,
which is deeply offensive (I believe that all standards should be protected under
something like Creative Commons.  For example, IEEE pays nothing to standards committees,
they are all volunteer and usually funded by the employers of the volunteers, but then
IEEE charges outrageous amounts of money for the machine-readable copies of the volunteer
effort, just because they are IEEE.  One of the reasons, thirty years ago, I refused to
become an IEEE member)
					joe





Joseph M. Newcomer [MVP]
email:  XXXX@XXXXX.COM 
Web:  http://www.**--****.com/ 
MVP Tips:  http://www.**--****.com/ 

Re: dynamic_cast does not work as specified

Postby Alexander Grigoriev » Thu, 15 Jan 2009 12:08:39 GMT

Five year ago it was like $22 for the PDF.










Re: dynamic_cast does not work as specified

Postby Doug Harrison [MVP] » Thu, 15 Jan 2009 14:50:32 GMT

On Tue, 13 Jan 2009 21:37:56 -0500, Joseph M. Newcomer




Herb Schildt wrote a book that was an annotated copy of the C Standard, and
people used to buy it just to get a cheap copy of the C Standard. No prizes
for guessing what the standard advice was for the annotations, though.

At least this 2003 edition of the C++ Standard supports copying to the
clipboard. The 1998 version cost only $18 but disabled the Copy feature.
One thing that continues to aggravate about PDF is that Adobe Reader is
really stupid about setting and remembering zoom. For example, even though
I've set "Fit Width" in Preferences, it starts off with the pages too wide
for the window. After I explicitly choose Fit Width from the toolbar, when
I change pages, it reverts to the original too-wide setting. Every time. If
anyone knows how to fix this, I'd love to hear about it.

-- 
Doug Harrison
Visual C++ MVP

Re: dynamic_cast does not work as specified

Postby Daniel James » Fri, 16 Jan 2009 00:14:53 GMT





The official PDF download has never been exactly expensive ... my 
recollection is that it was originally USD18 ... and the draft was 
free.

You can now download the current working draft (which appears to be the 
1998 standard with change markups for C++ 2009) FREE from:

 http://www.**--****.com/ 

You can also get a handy dead-tree version of the 1998 standard plus 
TC1 from Wiley:
 http://www.**--****.com/ 
/dp/0470846747/ref=pd_rhf_shvl_1 

(I don't remember it costing quite as much as the price quited here ... 
I think I paid about UKP35.00)

Cheers,
 Daniel.
 


Re: dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Sun, 18 Jan 2009 00:00:52 GMT

I have that book, and I got it for just that reason.  The annotations were useful, too,
and that made it worth the value.

What do you expect?  It's an Adobe product!  I've had the same complaint for years.
				joe





Joseph M. Newcomer [MVP]
email:  XXXX@XXXXX.COM 
Web:  http://www.**--****.com/ 
MVP Tips:  http://www.**--****.com/ 

Re: dynamic_cast does not work as specified

Postby Joseph M. Newcomer » Sun, 18 Jan 2009 00:02:32 GMT

Not all standards are available in PDF, and some of them are outrageously expensive even
in PDF.  I hadn't looked at the C++ standard in a while, but that's ISO/ANSI, not IEEE.
					joe







Joseph M. Newcomer [MVP]
email:  XXXX@XXXXX.COM 
Web:  http://www.**--****.com/ 
MVP Tips:  http://www.**--****.com/ 

Similar Threads:

1.dynamic_cast does not work across modules with multiple inheritance (VC2005)

I have a project which has been running well on VC6 for years now, but
now more and more reasons are telling me it's time to upgrade. The
system consists of a largish number of dynamically loaded DLLs which
are accessed in some kind of COM fashion.

I have now ported a core set of these but run into a big problem: RTTI
does not work correctly (=the way I want it to) between DLLs anymore,
which it did in VC6.

My setup is this:
class IBase
{
public:
	virtual Foo() = 0;
};

class IDerivedOne : virtual public IBase
{
public:
	virtual Bar() = 0;
};

class IDerivedTwo : virtual public IBase
{
public:
	virtual Goo() = 0;
};

class Test : public IDerivedOne, public IDerivedTwo
{
public:
	Foo();
	Bar();
	Goo();
};

What I then do is load a module (could be the same executable) where
Test is implemented, get a pointer to a new instance of the object (as
an IBase*) through a class factory and then do a dynamic_cast to
IDerivedOne*. However, the dynamic_cast returns NULL and I can't get it
to understand what I want.

Is this the way it should be or should it give me the pointer I want?
reinterpret_cast does not work either, as a cast to IDerivedOne would
really give me IBase disguised as IDerivedOne, to disastrous results.

Does anyone know how to deal with this? Or do you need more code to see
what's going on?

Thanks for any input

2.dynamic_cast does not work in packages

Hello,

I've stuck with the problem.
I've move some working code from exe to bpl, and now
dynamic_cast does not work in bpl.
meaning it always return NULL
what can be a problem

Dmitry


3.intellisense doe not work in 2005

Greetings,

I have a ~300K long C/C++ code that is developed with visual studio.  It is 
"clean C" meaning that it can be compiled as either a C or C++ code.  It 
compiles successfully with gcc (-Wall set), the Portland Group compilers, HP 
cc, and 2003 and 2005 versions of visual studio.

Intellisense stopped working a few weeks ago and nothing has gotten it back. 
The problem is specific to VS 2005, it still works in 2003.  I have deleted 
the ncb file and recompiled, and have even created a new project.  No joy. 
The following are true:

===================================================

the code is very close to the ansi standard for C and compiles as C++. 
Intellisense in 2005 fails when treated as either C and C++

the code has been compiled with several different compilers, and passes PC 
Lint cleanly.  It is highly unlikely that language errors are present.

intellisense works in VS 2003, but not 2005

if i remove most source files but leave all the header files in the project, 
intellisense works.in 2005.

removing the ncb file and recompiling does not help.

===================================================

This sounds like a bug in 2005.  I would hate to have to move back to 2003 
to get intellisense back.  Any ideas what to do?

thanks,
Gary


4.Cstring WriteString not working also write not working

 Hi I am trying to cahnge one line in a TXT file (log file of my application),
the TXT file already include many line and i try to recognize the line i 
need and then update it with the string i need,
But WriteString looks like it finish fine no fail,
But the TXT file doesn't change .
Here is the code:

CString	readLine,CompareResultFile="c:\a.txt";//the file path is just an 
example
CStdioFile	LogFile_CStdioFile;
char *  full_Log_file_path= (char*)malloc (_MAX_PATH);
int numLines=0;
TCHAR PASS_test[] = _T("Result: PASS");
TCHAR FAIL_test[] = _T("Result: FAIL");

if (!LogFile_CStdioFile.Open(CompareResultFile, CFile::modeReadWrite ))
{
     return FALSE;
}
while(LogFile_CStdioFile.ReadString(readLine) )
{
                sprintf(full_Log_file_path,"%S",readLine.GetBuffer(0));
	if(strncmp(full_Log_file_path,"Result:",7))
	{
		numLines++;
		continue;
	}
	else
	{
	      if(Status)
	      {
	        LogFile_CStdioFile.WriteString(PASS_test);
	      }
	      else
	     {
		LogFile_CStdioFile.WriteString(FAIL_test);
	     }
	     break;
	}
}
LogFile_CStdioFile.Close();

I need suggestion what is the best way to update one line?

5.OutputDebugString not working in VC2005 (was "not working in plain C++ app")

Ok, I have a little more information.  (The app I'm using to test with is 
just a plain, App-Wizard created app.)
*  If I run the app w/o the debugger then I can see the OutputDebugString 
statements in DebugView.
*  If I run the app w/o the debugger and then attach to the process using 
VC6.0 I can see the OutputDebugString output, too.
*  If I run the app w/o the debugger and then attach to the process using VS 
2005 I can NOT see the OutputDebugString output.

So, clearly the OutputDebugString calls are working but for some reason VS 
2005 is not showing them properly.

Microsoft Visual Studio 2005 Version 8.0.50727.42  (RTM.050727-4200)

With this new information, does anyone have any hints or suggestions?
Thanks!
Chris


"Chris" < XXXX@XXXXX.COM > wrote in message 
news:f8Hjg.24398$ XXXX@XXXXX.COM ...
> I'm using VS 2005 and am fairly new to it.  I knew VS6.0 like the back of 
> my hand....
> I've created a Win32 console app using the App wizard w/ default values to 
> work with some code I was previously working with in 6.0.  However, none 
> my OutputDebugString statements (and thus my TRACEs) are printing to the 
> Output window.  I can't find any docs that say why or why not.  Any hints 
> or things to check?  I'm really banging my head against this....
>
> Below is a sample run from my app SDKBase.exe.  If it were running under 
> 6.0 it would be littered with TRACE statements.  What's so different (or 
> turned off by default) in VS2005 so as to make my TRACEs not appear?
>
> Any help would be *really* appreciated.
> Chris
>
>
> 'SDKBase.exe': Loaded 
> 'D:\projects\covipc\Support\SDKBase\debug\SDKBase.exe', Symbols loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 
> 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_c8452471\mfc80d.dll', 
> Symbols loaded.
> 'SDKBase.exe': Loaded 
> 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll', 
> Symbols loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\shlwapi.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\ole32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\oleaut32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\ws2_32.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\ws2help.dll', Exports loaded.
> 'SDKBase.exe': Loaded 'C:\Program Files\Google\Google Desktop 
> Search\GoogleDesktopNetwork3.dll', Exports loaded.
> 'SDKBase.exe': Unloaded 'C:\Program Files\Google\Google Desktop 
> Search\GoogleDesktopNetwork3.dll'
> 'SDKBase.exe': Loaded 'C:\WINDOWS\system32\wmfhotfix.dll', Exports loaded.
> 'SDKBase.exe': Loaded 
> 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0\mfc80ENU.dll', 
> Binary was not built with debug information.
> The program '[39368] SDKBase.exe: Native' has exited with code 0 (0x0).
>
> 


6. How dynamic_cast works internally?

7. this.Cursor works but not Cursor.Current not working

8. dynamic_cast: 'a' is not a polymorphic type



Return to VC

 

Who is online

Users browsing this forum: No registered users and 62 guest