good question. in the function below you can see that aquiring a suite requires only SPBasicSuite. the macros requiring in_data do that only for general usage convenience. the value of SPBasicSuite doesn't change thourghout a session, and indeed some SDK samples show putting SPBasicSuite in a global valriable.
however, if you'd like a cleaner solution, you can see that all compute cache callbacks are given a AEGP_CCComputeOptionsRefconP arg. during AEGP_ComputeIfNeededAndCheckout or AEGP_CheckoutCached you can pass a struct that contains relevant caching data, AND a pointer for SPBasicSuite. i would not pass a pointer for in_data, as that pointer is valid only for the duration of a single AE call.
if you'd like to use the suite handling macros, you could create a local copy of the in_data struct and assign the passed value of SPBasicSuite into it's pica_basicP member.
PF_Err AEFX_AcquireSuite( PF_InData *in_data, /* >> */
PF_OutData *out_data, /* >> */
const char *name, /* >> */
int32_t version, /* >> */
const char *error_stringPC0, /* >> */
void **suite) /* << */
{
PF_Err err = PF_Err_NONE;
SPBasicSuite *bsuite;
bsuite = in_data->pica_basicP;
if (bsuite) {
(*bsuite->AcquireSuite)((char*)name, version, (const void**)suite);
if (!*suite) {
err = PF_Err_BAD_CALLBACK_PARAM;
}
} else {
err = PF_Err_BAD_CALLBACK_PARAM;
}
if (err) {
const char *error_stringPC = error_stringPC0 ? error_stringPC0 : "Not able to acquire AEFX Suite.";
out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;
PF_SPRINTF(out_data->return_msg, error_stringPC);
}
return err;
}