COM/interface question

Jarrett Billingsley kb3ctd2 at yahoo.com
Sun Dec 2 07:20:15 PST 2007


"Jarrett Billingsley" <kb3ctd2 at yahoo.com> wrote in message 
news:fiuib6$2oiq$1 at digitalmars.com...
> "Mike" <vertex at gmx.at> wrote in message 
> news:fiuejb$2j6g$1 at digitalmars.com...
>> I'm getting a strange compilation error with a COM interface I'm trying 
>> to access. Here's the relevant part of the interface:
>>
>> extern(Windows) interface IASIO : IUnknown
>> {
>>    ASIOBool init(void*);
>> [snip]
>>    ASIOError getChannels(long*, long*);
>> [snip]
>> }
>>
>> And here's the problem:
>>
>> test.init(null); // Error: function expected before (), not null of type 
>> IASIO*
>> test.getChannels(&ichans, &ochans); // compiles
>>
>> test is of type IASIO*. ASIOBool and ASIOError are both aliases for long. 
>> The null in the "init" is not the problem; if I give the function the 
>> correct pointer it doesn't compile as well.
>>
>> Has anybody any idea why one call compiles and the other doesn't?
>
> That's certainly odd, but you don't/shouldn't be using an IASIO*. 
> Interfaces are already reference types, so where you'd use an IASIO* in 
> C/C++, use an IASIO in D.

And it just dawned on me why the init isn't working: init is a property of 
all D types and variables.  The second one works because the . there is 
working like -> in C.

init should then work fine if you use an IASIO. 





More information about the Digitalmars-d mailing list