I'm trying to install a callback function with a carbon API but it doesn't work: it is triggered correctly by the event (when it finishes speaking) but it returns a segmentation fault 11 instead of printing "...Finished.".
Here's the code:
...
/* Creates SpeechChannel */
SpeechChannel speechchannel;
NewSpeechChannel(NULL,&speechchannel);
/* Sets callback */
CFNumberRef cbf = CFNumberCreate (
NULL,
kCFNumberLongType,
MySpeechDoneProc
);
OSErr error1;
error1 = SetSpeechProperty (speechchannel,kSpeechSpeechDoneCallBack,cbf);
/* Speaks it */
OSErr error2;
error2 = SpeakCFString(speechchannel, finalString, NULL);
...
later there is:
void MySpeechDoneProc (SpeechChannel chan,long refCon)
{
printf("...Finished.");
};
I guess I'm not installing the callback function properly?
The problem was that I didn't use the pointer to callback function in the creation of the CFNumberRef. The solution is twofold:
1) Declare the pointer for the function along with the function:
2) Pass the address of the callback function pointer as third argument in CFNumberCreate:
Here is the working code: