Use of GUID constants

KlausO via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Mar 10 02:16:30 PST 2016


Ok, but what's the intention behind defining GUIDs as enums in the first 
place ?
Why not defining them as const(GUID) and let the linker sort them out ?
Is there a recommended way to declare/define constants (e.g. as enums or 
consts) ?

In C (separate compilation) they are declared as "EXTERN_C const GUID"
and you use one C file to define this GUIDs for the Linker.

Thanks

-- KlausO

For the record, found two somehow related issues in bugzilla:

https://issues.dlang.org/show_bug.cgi?id=14309
https://issues.dlang.org/show_bug.cgi?id=4092


Am 09.03.2016 um 23:20 schrieb Ali Çehreli:
> On 03/09/2016 10:35 AM, KlausO wrote:
>
>  >          IUnknown pUnk;
>  >
>  >          //
>  >          // Does not compile:
>  >          //
>  >          //  Error: function
>  > core.sys.windows.unknwn.IUnknown.QueryInterface(const(GUID)* riid,
>  > void** pvObject) is not callable using argument types (const(GUID),
> void**)
>  >          //
>  >          hr = storage.QueryInterface(IID_IUnknown, cast(void**)&pUnk);
>
> Without any experience with COM or (current) Windows programming, just
> by looking at that error message, the following may work:
>
>      IID unknown = IID_IUnknown;
>      // (Apparently, IID is an alias for const(GUID).)
>
>      storage.QueryInterface(&unknown, /* ... */);
>
> Ali
>



More information about the Digitalmars-d-learn mailing list