On 21 Sie, 13:49, "Igor Tandetnik" <itandet...@mvps.org> wrote:
"tom" <kamild...@poczta.onet.pl> wrote in message
news:1187687316.394719.36230@w3g2000hsg.googlegroups.com
I try to move all C-based interfaces in my application to COM. I
changed
class IMyIf
{
virtual void Foo() = 0;
}
to:
#include"unknwn.h"
__interface IMyIf : IUnknown
{
virtual void Foo() = 0;
}
but when I try to compile simple console based application with this
interface I get following error
error C2898: HRESULT IUnknown::QueryInterface(Q**p) : member function
templates cannot be virtual
Just make it
struct IMyIf : public IUnknown {
STDMETHOD(Foo)() = 0;
};
Better still, define your interfaces in an IDL file and use
MIDL-generated header.
--
Thanks Igor,
So, your advise is to give up with __interface and use just struct,
but why ? Isn't '__interface' supposed to work with COM - I thought
that this this extension is made to work with COM easier ...
On the other side,in the future, I rewrite most important interfaces
to MIDL, it probably generates struct {} so it makes a little
difference, but
I have a bigger problem- on this machine even standard ATL project
doesn't compile ( the same error as above ), but on the second one
everythng goes with no problems. The only difference is in
preprocessed unknwn.h file - it is something like that:
typedef struct IUnknown IUnknown; // ok
typedef __interface IUnknown IUnknown; // this one doesn't compile.
Both have Visual Studio 2005 on WindowsVista. I see no difference in
project configuration ... Do you know what can be a problem ?
Thanks in advance,
Kamil- Ukryj cytowany tekst -
- Poka cytowany tekst -
Sorry for bothering you. I just run 'Find and replace in files' -
replaced those words in 'unknwn.h' too :(. Now everythings works ok -
is not a problem.