|
As far as I know, this is standard syntax. PJ's page above describes it, but I can't recall any other references off the top of my head. Microsoft's documentation is pretty good. It usually states very clearly if they're describing something that is specific to their implementation.
Sorry I can't be of more help. Try compiling a simple example with GCC or something like that. If it works there as well, it's probably standard.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Hi Ryan,
Unfortunately I don't have GCC - or anything other than VC++ - available for testing.
My reading of the page that PJ gave is that the base classes have to be declared as interface or __interface , which is an MS-specific extension. I have a feeling it was introduced to make Managed C++ a little easier - .NET obviously distinguishes between interfaces and abstract base classes.
Thanks a lot for the help anyway,
Pete
|
|
|
|
|
Perhaps define a new interface ICloneable ? ICamera and IOrientation would also need to derive from a common class (eg: IImagingLibObject ). This is how Java does it.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Hi Ravi, thanks for the reply.
I think maybe I'm misunderstanding, but I think you're saying I should perhaps do something like:
class IClonable
{
public:
virtual ~IClonable()
{}
virtual IClonable *CreateClone() = 0;
};
class ICamera : public ICloneable
{
};
class IOrientation : public ICloneable
{
};
class C3DCamera : public ICamera, public IOrientation
{
public:
ICloneable *CreateClone();
}
Is that correct?
So in this scheme clients of IClonable would presumably be static_cast<>ing the result of CreateClone()? Sounds sensible to me. I'm vaguely worried about the whole 'Diamond Inheritance Considered Evil' thing, but from my understanding (which I admit isn't great), the evilness doesn't apply to abstract base classes, right?
One final thing. You mention creating a common IImagingLibObject interface. I don't understand the reason for doing that.
Again, thanks for the advice!
Pete
|
|
|
|
|
The signatures differ by return type - which isn't the same, nor is it different enough.
Why are they virtual, what behaviour are you expecting ?
How are you planning on using the CreateClone() method(s).
What Ryan and PJ suggest is similar to what is described in the ARM 10.1.1.
If you read ARM 10.1, 10.2, 10.3 i'm sure you'll be able to figure out a soultion.
...cmk
Save the whales - collect the whole set
|
|
|
|
|
Hi, thanks for the reply.
The reason they're virtual is pretty much standard interface inheritance. Instead of clients using a C3DCamera instance directly, they will use it's ICamera interface. I need the clients to not expect a C3DCamera, as I'm extending my application with another class (C2DCamera) that can provide ICamera functionality, but NOT IOrientation. Clients that only use the ICamera interface should be able to use either C2DCamera or C3DCamera interchangably. Does that make sense?
I need both interfaces to expose a CreateClone() method because clients of both interfaces need to be able to make local copies of the instance that's implementing, without knowing the concrete type of the instance.
Unforunately I don't have a copy of ARM at my current workplace. It's not available online, AFAIK. I'll have to bug my boss for a copy, I know it's kinda the bible for C++.
Thanks again for the response,
Pete
|
|
|
|
|
Then you may want to make the return type an argument instead.
e.g.
class ICamera {
public:
virtual bool CreateClone( ICamera* &C ) const = 0;
virtual bool f() = 0;
};
class IOrientation {
public:
virtual bool CreateClone( IOrientation* &O ) const = 0;
virtual bool f() = 0;
};
class C2DCamera : public ICamera, public IOrientation {
public:
virtual bool CreateClone( ICamera* &C ) const { C = new C2DCamera; return(true); }
virtual bool CreateClone( IOrientation* &O ) const { O = new C2DCamera; return(true); }
virtual bool f() { return(true); }
};
class C3DCamera : public ICamera, public IOrientation {
public:
virtual bool CreateClone( ICamera* &C ) const { C = new C3DCamera; return(true); }
virtual bool CreateClone( IOrientation* &O ) const { O = new C3DCamera; return(true); }
virtual bool f() { return(true); }
};
int main(int argc, char* argv[])
{
C2DCamera d2;
C3DCamera d3;
ICamera *i2 = &d2,
*i3 = &d3;
ICamera *c2 = NULL,
*c3 = NULL;
i2->CreateClone(c2);
c2->f();
i3->CreateClone(c3);
c3->f();
return 0;
}<pre>
...cmk
<small>Save the whales - collect the whole set</small>
|
|
|
|
|
Hi,
That'll work! I think I'll implement the CreateClone(...) methods as you suggest.
A shame that standard C++ won't let you explicitly override a specific base class's pure virtual, but that's life I guess. I'm sure there's a good (and suitably obscure) reason for it.
Cheers,
Pete
|
|
|
|
|
Please tell me how can i use USB port in VC++6.Any api aur functions. I Don't want to use ActiveComport.
Humayun AJmal
|
|
|
|
|
yes u can.....u can use the windows driverz for that.....
hope thiz site helpz u.....
http://www.lvr.com/usb.htm[^]
hmmm...i have one project in it...by sending midid data to the windows driver which getz routed to the usb driver..
anywayz .....
just look up the above link...
itz informative.....
cheerz.....
"faith, hope, love remain, these three.....; but the greatest of these is love" -1 Corinthians 13:13
|
|
|
|
|
Hello,
I'm making a dialog-based application and I want to assign a CEdit class to an Edit Box and when I right-click on the control and choose "Add Variable...", I can't assign a control variable because the "Control Variable" checkbox is disabled as well as all the control-related parameters. I can add an "int" or "char" or another standard type but I connot add a control variable. Does anyone would know why I can't assign a control variable to my Edit Box??
Thanks in advance,
Veronique
|
|
|
|
|
Is this with Visual Studio v6? If so, I'm not seeing the same thing you are (e.g., where do you right-click on the control).
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
It is with Visual Studio .NET (v7).
|
|
|
|
|
Are you positive you don't already have a CEdit member variable for that control?
|
|
|
|
|
Hi!
Yes, I'm positive I don't have a CEdit member variable for that control... but now I found the problem. The problem is (was) in the .vcproj project file. In the <Globals> section, the RESOURCE_FILE Value was set to the wrong .rc file. I was trying to assign a member variable to a control that wasn't defined in the specified .rc file. I set the correct .rc file in the .vcproj file and now I can do what I wanted to do.
Here is the <Globals> section of the .vcproj file.
<Globals>
<Global
Name="RESOURCE_FILE"
Value="WX.rc"/>
</Globals>
Thank you all for trying to help me!!
Bye!
Véronique
|
|
|
|
|
Hello Veronique,
It is not hard to do it by hand as well.
- Add the control variable to your dialog header file(
CEdit m_myEdit; ) - On your implementation file, add a line to the DoDataExchange method (
DDX_Control(pDX, IDC_MY_EDIT, m_myEdit); , where IDC_MY_EDIT is the ID of the Edit Box) - On your code now you can use the m_myEdit for controlling the edit box. (
m_myEdit.SetWindowText("bla bla bla"); )
Hope this helps.
-- Ricky Marek (AKA: rbid)
-- "Things are only impossible until they are not" --- Jean-Luc Picard
My articles
|
|
|
|
|
Ok, I'm trying to take this code apart and understand it
http://www.codeproject.com/threads/killprocess.asp
The code is at the bottom.
Now with the TerminateProcess function
bResult = TerminateProcess(hProcess,0);
What are the parameters that it takes, is 0 the PID?
Thanks
|
|
|
|
|
0 is the exit code.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
What other exit codes are there,
and with the first argument for the terminate process function.
I tired the code and for this segment
HANDLE hProcess = FindProcess(pstrProcessName,
dwId);
I get a compiling error saying it can't find the function FindProcess.
This is going to show how little I know about windows coding but what is a HANDLE?
Thankss
|
|
|
|
|
superstar4410 wrote:
What other exit codes are there,
Exit codes are application specific, with 0 usually indicating success.
superstar4410 wrote:
I get a compiling error saying it can't find the function FindProcess.
I cannot find it in MSDN. Do you know it to exist?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
|
FindProcess() is a private method of the CKillProcess class. It can only be used within a CKillProcess object.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
where do I find the code to the CKillprocess class?
|
|
|
|
|
See here.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
i'm confused, the link just takes me to the discussion board
|
|
|
|