Obex class_new() difference between Max 4, 5 and Jitter


    Aug 17 2008 | 1:55 pm
    For jitter objects, the conventional way is to use a name with underscores instead of dots in your c code. For example, in your jitter code, you call jit_class_new() with "foo_bar", and in your max wrapper code you call jit_object_new(gensym("foo_bar"), ..).
    This appears to be an optional thing for Jitter objects, because if you call both jit_class_new() and jit_object_new() using "foo.bar" instead of "foo_bar", the object will still work fine in Max.
    I'm used to writing Jitter objects more than regular max obex objects, so I created an obex object and in my code I wrote class_new("foo_bar", ...). Now the problem is that there appears to be a difference between Max 4 and 5 in this regard.
    Max 4 will happily instantiate a correct working object, while Max 5 will give you a pink box without inlets or outlets and no error messages whatsoever.
    I found that Max5 will only instantiate the object if you call class_new() with "foo.bar" instead of "foo_bar", i.e. the same name as the object on disk / bundle executable.
    While chasing this problem I found that Max4 appears to instantiate the obex object even if you call class_new("some_invalid_name", ...). So I guess in Max4 this name is only stored in the object for possible identification and is not used for loading the bundle from disk.
    This is a summary of my findings:
    max4 max5 jitter "foo_bar" ok ok jitter "foo.bar" ok ok obex "foo_bar" ok x obex "foo.bar" ok ok obex "something" ok x
    I've only tested this on MacOS 10.5.4 with Max 4.6.3 and 5.0.4
    It took me a very long time to figure out what the problem was. Especially since there are no error messages. The debugger made no sense to me either.
    I now know how to get things working of course, but it would be nice if someone could give a little explanation for why this works like it does. We're close to the release of the new sdk, so I guess this might be irrelevant soon, but I thought it might be worth reporting since it could possibly prevent people from making the same mistake.
    Cheers, Thijs

    • Aug 19 2008 | 9:26 am
      I just ran into this myself this morning. Will investigate. Thanks for the report.