“Convertendo” um ponteiro de função em um bloco no objetivo-C

Eu estou fazendo alguma Interop de Mono C # para Obj-C e corri para este problema. O código C # precisa passar um retorno de chamada - o que ele faz com um ponteiro de função. Eu posso pegar o ponteiro de função do lado Obj-C e chamá-lo e tudo funciona. Mas agora preciso fornecer esse ponteiro de função como um retorno de chamada para a API de terceiros, que funciona com blocos como um retorno de chamada. Eu quero que o terceiro chame a função C # - então, de certa forma, eu estou tentando converter o ponteiro de função em um bloco para que o terceiro possa executá-lo, ou fazer algum tipo de ponte - criar meu próprio bloco que é executado esse ponteiro de função e dar para o terceiro. Eu não consigo encontrar uma maneira de fazer isso - como eu iria gerar um bloco com informações de qual função executar e, em seguida, dar a terceiros. Talvez haja outra opção para mim?

Edit: Colocar a função em uma variável global pode funcionar, mas eu quero ser capaz de ter uma infinidade deles, pois a API de terceiros é assíncrona e não quero que ela chame o retorno de chamada errado.

Código que eu tentei:

typedef void (*DummyAction)(char * result);
typedef void (^DummyBlock)(char * result);

@interface FunctionToBlock : NSObject
{
    DummyAction function;
    DummyBlock block;
}

- (id) initWithFunction: (DummyAction) func;
- (DummyBlock) block;
@end

@implementation FunctionToBlock : NSObject
- (id) initWithFunction: (DummyAction) func {
    if (self = [super init]) {
        function = func;
        block = ^(char * result) {
            function(result);
        };
    }
    return self;
}

- (DummyBlock) block {
    return block;
}
@end

E então eu corro isso com

void RegisterCallback( char * text, DummyAction callback)
{
    FunctionToBlock *funcToBlock = [[FunctionToBlock alloc] initWithFunction : callback];
    funcToBlock.block(text);
}

E isso falha com BAD_ACCESS. Talvez eu esteja fazendo algo errado, já que eu ainda não sou muito proficiente com o Obj-C. Posso confirmar que o retorno de chamada está ok se for executado diretamente e que o bloco está sendo chamado, mas falha na linha de função (resultado).

questionAnswers(3)

yourAnswerToTheQuestion