www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - Strange behavior

reply yvad <yannurov gmail.com> writes:
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
parent yvad <yannurov gmail.com> writes:
I have this error on dmd 1.028 and 2.012 on Windows.
Mar 25 2008