Strange behavior

yvad yannurov at gmail.com
Tue Mar 25 04:01:49 PDT 2008


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?

I have this error on dmd 1.028 and 2.012 on Windows.


More information about the Digitalmars-d-learn mailing list