digitalmars.D.bugs - Strange behavior
I have 2 modules. // IUnknown.d module IUnknown; pragma(lib, "ole32.lib"); public import HRESULT; extern (C) { const GUID IID_IUnknown; } extern (Windows) { interface IUnknown { HRESULT QueryInterface(in GUID* riid, out void* ppvObject); uint AddRef(); uint Release(); } } abstract class AbstractUnknown : IUnknown { extern (Windows): // IUnknown HRESULT QueryInterface(GUID* riid, out void* ppvObject); uint AddRef() { .... } uint Release() { .... } } // and IClassFactory.d module win32.api.com.interfaces.IClassFactory; pragma(lib, "ole32.lib"); public import IUnknown; extern (C) { const GUID IID_IClassFactory; } extern (Windows) { interface IClassFactory : IUnknown { HRESULT CreateInstance(in IUnknown pUnknown, in GUID* riid, out void* ppvObject); HRESULT LockServer(in bool fLock); } } abstract class AbstractClassFactory : AbstractUnknown, IClassFactory { extern (Windows): // IUnknown HRESULT QueryInterface(in GUID* riid, out void* ppvObject) { .... } .... } And I get an error on line in AbstractClassFactory "HRESULT QueryInterface(in GUID* riid, out void* ppvObject) {": Severity and Description Path Resource Location Creation Time Id QueryInterface of type HRESULTWindows (GUID * riidriid, out void* ppvObject ppvObject) overrides but is not covariant with QueryInterface of type HRESULT(GUID * riidriid, void* ppvObject ppvObject) import/win32/api/com/interfaces IClassFactory.d line 28 1206420149328 12010 if I comment line in AbstractUnknown with "HRESULT QueryInterface(in GUID* riid, out void* ppvObject);" it compiles without any error. Is it should be so or I am doing something wrong?
Mar 25 2008