Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
December 02, 2007 COM/interface question | ||||
---|---|---|---|---|
| ||||
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? -Mike |
December 02, 2007 Re: COM/interface question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike | "Mike" <vertex@gmx.at> wrote in message news:fiuejb$2j6g$1@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. |
December 02, 2007 Re: COM/interface question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | "Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:fiuib6$2oiq$1@digitalmars.com... > "Mike" <vertex@gmx.at> wrote in message news:fiuejb$2j6g$1@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. |
December 02, 2007 Re: COM/interface question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | Ah! Of course! I translated the SDK from C++, where it's all pointers, and didn't care (excactly because "." does (usually) behaves like "->"). Now it's all IASIO without pointers.
Thanks!
-Mike
Jarrett Billingsley Wrote:
> "Jarrett Billingsley" <kb3ctd2@yahoo.com> wrote in message news:fiuib6$2oiq$1@digitalmars.com...
> > "Mike" <vertex@gmx.at> wrote in message news:fiuejb$2j6g$1@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.
>
>
|
December 03, 2007 Re: COM/interface question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike | May I suggest to have a look at : http://www.dsource.org/projects/juno/wiki/TypeLibraryImporter you'll find worthfull COM information and a nice tool to automate this task. HTH Bjoern Mike schrieb: > 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? > > -Mike |
Copyright © 1999-2021 by the D Language Foundation