|
you should make the destructor virtual in base class.
class A
{
public:
A() {};
virtual ~A() {};
};
class B : public A
{
public:
B() {};
virtual ~B() {};
};
The destructor should not be called directly.
It is called by C++ when the object looses scope:
int main ()
{
{
A localA;
} // ~A is called by C++ , because localA looses scope
}
A very good book about this topic is Effective C++ from Scott Meyers.
Regards,
Ralf
|
|
|
|
|
phijophlip wrote:
int main(void)
{
B obj;
A obj2;
obj.~B();
obj2.~A();
return 0;
}
Don't call the destructor explicitly! That's why it's being called twice! The destructor is being called once by you and once by the compiler when the main function is called.
|
|
|
|
|
I am witting an activeX control to display jpg image. I am using GDI+ to load and display the Image . It Works fine.
But When i closed the ActiveX test container,the window is closed but TSTCON32.EXE is running. i saw it in TaskManeger.
When i used that ActiveX Control in (web) html, it works fine. But iexplorer.exe is running.
When i used it in someother vc++ dialog based programs same thing happens.
What is the problem ? please anyone help me.
|
|
|
|
|
When I compile the program I get;
Release/Extractor.pch' is not a precompiled header file created with this compiler.
What is that? and what can I do to make it work again?
|
|
|
|
|
|
I have done that but I still get the same error message.
Do you have any more ide'es?
|
|
|
|
|
http://support.microsoft.com
|
|
|
|
|
http://support.microsoft.com/kb/194615/EN-US/
|
|
|
|
|
|
I Have done that but is still don'r work,
And it mark this file in the top of the file.
#include "stdafx.h"
|
|
|
|
|
hie friends,
please consider following MI example.
class Base1
{
public:
virtual void func1(void)
{
}
};
class Base2
{
public:
virtual void func2(void)
{
}
};
class Derived : public Base1,public Base2
{
public:
virtual void func3(void)
{
}
};
Here C++ Books says that here derived object will contain 2 vptrs pointing to 2 vtables.My question is why two vtables instead of one?
|
|
|
|
|
In your example I don't think two vtables are needed. Generally, you need two vtables if the derived class overrides the same function in more than one baseclass:
<br />
class Base1<br />
{<br />
public<br />
virtual void func1(void);<br />
virtual void funcCommon(void);<br />
}<br />
<br />
class Base2<br />
{<br />
public<br />
virtual void func2(void);<br />
virtual void funcCommon(void);<br />
}<br />
<br />
class Derived : public Base1, public Base2<br />
{<br />
public<br />
virtual void func3(void);<br />
virtual void funcCommon(void);
}<br />
The reason for the two vtables is to make Derived act as both a Base1 and a Base2:
<br />
Base1* pB1;<br />
Base2* pB2;<br />
Derived d;<br />
pB1 = &d;<br />
pB1->funcCommon()
pB2 = &d;<br />
pB2->funcCommon()
See also the article "C+: under the hood" by Jan Gray in MSDN.
Cheers
Steen.
"To claim that computer games influence children is ridiculous. If Pacman had influenced children born in the 80'ies we would see a lot of youngsters running around in dark rooms eating pills while listening to monotonous music"
|
|
|
|
|
It's quite simple to redirect console application output using unnamed pipe. The problem is that standard output stream uses buffer! Default buffer size is 4K, and output text won't be delivered until buffer is filled or program is closed.
I run application that spawns another process and should receive its output as soon as it's availible. This should be done WITHOUT smashing into child application code (so setvbuf(stdout, 0, _IOFBF, 2) or fflush()/_flushall() calls cannot be used).
So, does anyone know the way to set buffer size of another process' standard output stream?
|
|
|
|
|
Hi guys
I'm doing a Doc-View app and I want to chage the output default directory in the CFileDialog when I do an Save as..
There is a simple way to do this?
Thanks
Doc
|
|
|
|
|
set CFileDialog.m_ofn.lpstrInitialDir before calling CFileDialog::DoModal.
Cheers
Steen.
"To claim that computer games influence children is ridiculous. If Pacman had influenced children born in the 80'ies we would see a lot of youngsters running around in dark rooms eating pills while listening to monotonous music"
|
|
|
|
|
Thanks guy
The solution has been a little more difficult than this ( but this has to be included ) cause I needed to code CMyDOC::DoSave method to change it in my App.
Doc
|
|
|
|
|
Oh, I see! I misunderstood you question, I thought it was just about CFileDialog, not the Doc-View architechture. But you seem to have found the answer yourself, nice work.
Cheers
Steen.
"To claim that computer games influence children is ridiculous. If Pacman had influenced children born in the 80'ies we would see a lot of youngsters running around in dark rooms eating pills while listening to monotonous music"
|
|
|
|
|
Hi,
These days I'm doing a project in VB and VC++ for my second year project.
How to create the object in Win32 dll project (VC++) which will allow us to interact with my vb acivex dll "WTHCom".
method signature of activeX dll is setPath(String,String).
I want to pass two strings from Win32 dll (VC++) to VB ActiveX dll.
ActiveX dll name : WTHCom and Class name : WTHCls
Pls someone help me.
Your help is highly appreciated.
This is my AvtiveX dll code in VB
Public Function getStrings(ByVal str1 As String, ByVal str2 As String) As Integer
// Implementation of method
getStrings = 0
End Function
Thanks in advance.
Regards,
lgmperera
|
|
|
|
|
I have created a menu item in an SDI application in vc++ 6.0. the i have mapped the menu command thru class wizard and it has generated the function skelteon of the form. I can briefly tell u want I intend to do:
void CMainframe:: onclickMenu(......)
{
Get the name of the text file to be opened
Create a new window with only scrollbars;
Display the contents of the file opened in this window;
}
Please tell me how to create a window and display the text in it
|
|
|
|
|
In the window generated you can mak a RICHEdit control or even an edit control that supports multiline.
You can either do it with filemapping funtions
CreateFileMapping() //maps a file into the memory
MapViewOfFile() /*this function returns a pointer to a LPVOID which conatins the contetnt of the file*/
gabby
|
|
|
|
|
Hi,
I developed a control panel applet and placed the '.cpl' file in "C:\i soft".
I added a new key under :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control
Panel\Cpls as ES REG_SZ C:\i soft\hvcescp.cpl
Now, this applet is displaying in the control panel and working fine,but the
icon (that I gave in resource file) is not getting displayed.
If the ".cpl" file is moved to a folder whose name does not contain space characters (e.g.: "isoft"), icon is getting displayed in control panel. Then also, applet is working when I double click on control panel item.
I am responding to the CPL_NEWINQUIRE message with the proper icon ID.
What to be done ? Is there anything wrong with Registry entry given above?
Sunil kumar.A.V., SSE.
|
|
|
|
|
sunilkumar_prog wrote:
I added a new key under :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control
Panel\Cpls as ES REG_SZ C:\i soft\hvcescp.cpl
Since spaces are involved, have you included the path in quotation marks?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Thanks for the reply.
We tried both single & double quotation marks.Still it is not working.
|
|
|
|
|
//Set up text color
switch(suit){
case (SUIT_CLUBS) : SetTextColor(hDC, C_BLACK); strcpy(strSuit,"Clubs"); break;
case (SUIT_DIAMONDS) : SetTextColor(hDC, C_RED); strcpy(strSuit,"Diamonds"); break;
case (SUIT_HEARTS) : SetTextColor(hDC, C_RED); strcpy(strSuit,"Hearts"); break;
case (SUIT_SPADES) : SetTextColor(hDC, C_BLACK); strcpy(strSuit,"Spades"); break;
I am a novice and would appreciate suggestions on how to fix this, The program has drop down windows i would like to change the color of the text in now it is all black. Thanks
|
|
|
|
|
Insert hDC = GetDC( hWnd ) before switch.
Be careful with strcpy function:
- no end of string
- lenght may overflow
|
|
|
|