MaxMSP externals with ObjectiveC 
Thursday, November 9, 2006 11:05 - Code
yes, it's possible because ObjectiveC is a strict superset of C. You just need to use a *.m extension so that Xcode compiles it as ObjectiveC and not just C.

I already used C++ to write maxmsp externals so I knew it should be possible with another C based language. But I needed a proof of concept. here it is:


#include "ext.h"
#import <Foundation/NSObject.h>

@interface Fraction : NSObject
{
int num;
int den;
}
- (void) setNumerator: (int) d;
- (void) setDenominator: (int) d;
- (int) numerator;
- (int) denominator;
- (void) print;
@end

@implementation Fraction
- (void) setNumerator: (int) d
{
num = d;
}
- (void) setDenominator: (int) d
{
den = d;
}
- (int) numerator
{
return num;
}
- (int) denominator
{
return den;
}
- (void) print
{
post("%i/%i",num,den);
}
@end

typedef struct
{
t_object o;
Fraction *frac; // to show how we can store an ObjectiveC instance inside a C struct.
} objc_t;

static t_messlist *objc_class = NULL;

static void *objc_new(Symbol *s, short ac, Atom *at)
{
objc_t *o = (objc_t *)newobject(objc_class);
Fraction *frac = [[Fraction alloc] init];
[frac setNumerator: 1];
[frac setDenominator: 4];
[frac print];
o->frac = frac;
return o;
}
static void objc_free(objc_t *o)
{
Fraction *frac = o->frac;
if(frac)
{
[frac release];
}
}
int main(void)
{
setup(&objc_class,
(method)objc_new,
(method)objc_free,
(short)sizeof(objc_t), 0L,
A_GIMME, 0);
}

  |  permalink   |  related link   |   ( 3 / 6139 )