On Thursday, August 27, 2009, victor wrote:
But the silly thing I think is that the macro is
defined for __GNUC__
and it clearly does not work with it. If I undefine that token, it's good.
I don't like the idea of touch the sdk headers; I thought really they
should work out of the box.
Rui's solution seems to be similar to mine (getting rid of __cdecl).
Whereas this one just fixes the macro to keep the calling convention as it
is.
The code posted by Rui is defining __cdecl as a void symbol, just before
including the offending header. My proposal was defining __cdecl at the same
place, but in a different way. Maybe this would be more clear:
#if defined(__GNUC__)
#define __cdecl __attribute__((cdecl))
#endif
#include <aeffectx.h>
[...]
I have not been able to test the plugin yet, perhaps I'll have a better
idea of what I should do then.
Victor
----- Original Message -----
From: "Pedro Lopez-Cabanillas" <pedro.lopez.cabanillas(a)gmail.com>
To: "Rui Nuno Capela" <rncbc(a)rncbc.org>
Cc: "Victor Lazzarini" <Victor.Lazzarini(a)nuim.ie>ie>;
<linux-audio-dev(a)lists.linuxaudio.org>
Sent: Thursday, August 27, 2009 5:28 PM
Subject: Re: [LAD] VST SDK2.4 issue
> On Thursday, August 27, 2009, Rui Nuno Capela wrote:
>> On Thu, August 27, 2009 15:58, Victor Lazzarini wrote:
>> > Hi everyone,
>> >
>> >
>> > perhaps one of you might have already seen this issue and will know
>> > what
>> > is the best solution.
>> >
>> > My problem is that one of the headers in the VST SDK2.4, aeffect.h,
>> > has a macro, VSTCALLBACK, which in gcc will be defined as __cdecl .
>> > This
>> > is not recognised by the compiler, thus preventing me from using that
>> > header (to build a plugin).
>> >
>> >
>> > My solution was to forcibly undefine __GNUC__ so that the macro
>> > gets a blank definition.
>> >
>> > However, I am not sure this is the best way out; I am wondering
>> > whether the calling convention will break the plugin, since the host
>> > might be expecting __cdecl and it will not be getting it.
>> >
>> > Perhaps someone else would have a different solution.
>>
>> on my qtractor stuff, i do something like this,
>>
>>
>> #if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32)
>> #define __cdecl
>> #endif
>>
>> #include <aeffectx.h>
>>
>> #if !defined(VST_2_3_EXTENSIONS)
>> #define VSTCALLBACK
>> #endif
>>
>>
>> it seems to get it just fine :)
>
> I'd tried this:
>
> #define __cdecl __attribute__((cdecl))
>
> Much like another typical MSVC keyword:
>
> #define __stdcall __attribute__((stdcall))
>
> If you want to compare the documentation of both compilers:
>
>
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
>
http://msdn.microsoft.com/en-us/library/984x0h58.aspx
>
> Regards,
> Pedro