|
Thats pretty simple if you use CAsyncSocket or CSocket in MFC. They have all the functions you need. If you are a total newbie, then look up for the book Sams'Teach yourself VC++ in 21 days (easily available on net for download). One of the chapter has a sample program just as you described, plus you can learn the concepts too. It can work both as a client or a server and you get to chose the option. Run this application as a server first, then again for the two clients, run the same application twice as client, I guess that should work pretty fine.
long live the dEvIL
|
|
|
|
|
|
|
Hello Friends,
In the program given, the destructor is called Explicitly
#include <iostream.h>
class A
{
public :
A()
{
cout <<"Class A:Constructor()" << endl;
}
virtual void show()
{
cout <<"in the base class" << endl;
}
~A()
{
cout <<"Class A:Destructor()" << endl;
}
};
class B : public A
{
public:
B()
{
cout <<"Class B:Constructor()" << endl;
}
void show()
{
cout <<"in the derived class" << endl;
}
~B()
{
cout <<"Class B:Destructor()" << endl;
}
};
int main(void)
{
B obj;
A obj2;
obj.~B();
obj2.~A();
return 0;
}
The program shows the destructor of the base and derived class is called two times one "Explicitly" and
"Implicitly".?
My Question is , since in the program destructor is "Explicitly" but the program output shows the destructor is called "Explicitly" and "Implicitly".
The program is given below
"
Class B:Constructor()
Class A:Constructor()
Class B:Destructor()
Class A:Destructor()
Class A:Destructor()
Class A:Destructor()
Class B:Destructor()
Class A:Destructor()
Press any key to continue
".
This program is run in VC++ IDE.
Please help if you now why this happening.
Best Regards,
Phijo
|
|
|
|
|
first of all, i've tested your application and this is the output i got:
Class A:Constructor()
Class B:Constructor()
Class A:Constructor()
Class B:Destructor()
Class A:Destructor()
Class A:Destructor()
it makes perfect sence and i shall explain by steps:
1. B obj - calls first A const. cause b inherites from A and then calls B const. therefor you get the
"Class A:Constructor()
Class B:Constructor()"
2. A obj2 - calls A const. therefor you get the
"Class A:Constructor()"
3. obj.~B(); - calls B dest. and then call A dest. (the parent) therefor you get the
"Class B:Destructor()
Class A:Destructor()"
4. obj2.~A() - calls A dest.therefor you get the
"Class A:Destructor()"
and that's that
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
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
|
|
|
|