Hello,
I’m trying to use the CallFunc interface. With integer parameter it works:
TH1D *h = new TH1D("h", "", 4, 0., 4.);
TObject *obj = h;
ClassInfo_t* clInfo = obj->IsA()->GetClassInfo();
CallFunc_t* callFunc = gInterpreter->CallFunc_Factory();
Long_t offset;
gInterpreter->CallFunc_SetFuncProto(callFunc, clInfo, "GetBinCenter", "int", &offset);
TInterpreter::CallFuncIFacePtr_t faceptr = gInterpreter->CallFunc_IFacePtr(callFunc);
int par0 = 1;
vector<void*> parameters = { &par0 };
double result = 0.;
faceptr.fGeneric(obj, parameters.size(), parameters.data(), &result);
printf("result = %f\n", result); // -> result = 0.5
However, I can’t figure out how to do it for string parameters - the code always leads to segfault:
TH1D *h = new TH1D("h", "", 4, 0., 4.);
TObject *obj = h;
ClassInfo_t* clInfo = obj->IsA()->GetClassInfo();
CallFunc_t* callFunc = gInterpreter->CallFunc_Factory();
Long_t offset;
gInterpreter->CallFunc_SetFuncProto(callFunc, clInfo, "SetName", "char*", &offset);
TInterpreter::CallFuncIFacePtr_t faceptr = gInterpreter->CallFunc_IFacePtr(callFunc);
char buf[] = "bla";
vector<void*> parameters = { &buf };
void *result = NULL;
faceptr.fGeneric(obj, parameters.size(), parameters.data(), result); // -> segmentation violation
I would be grateful for suggestions. Many thanks in advance!