digitalmars.D - COM/interface question
- Mike (14/14) Dec 02 2007 I'm getting a strange compilation error with a COM interface I'm trying ...
- Jarrett Billingsley (5/22) Dec 02 2007 That's certainly odd, but you don't/shouldn't be using an IASIO*.
- Jarrett Billingsley (6/33) Dec 02 2007 And it just dawned on me why the init isn't working: init is a property ...
- Mike (4/42) Dec 02 2007 Ah! Of course! I translated the SDK from C++, where it's all pointers, a...
- BLS (6/26) Dec 03 2007 May I suggest to have a look at :
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
Dec 02 2007
"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.
Dec 02 2007
"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...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.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.
Dec 02 2007
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...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.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.
Dec 02 2007
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
Dec 03 2007