„Konwersja” wskaźnika funkcji na blok w celu-C

Robię trochę Interop z Mono C # do Obj-C i wpadłem na ten problem. Kod C # musi przekazać wywołanie zwrotne, które wykonuje za pomocą wskaźnika funkcji. Mogę pobrać wskaźnik funkcji ze strony Obj-C i wywołać go i wszystko działa. Ale teraz muszę nadać temu wskaźnikowi funkcji jako wywołanie zwrotne do API innej firmy, które działa z blokami jako wywołanie zwrotne. Chcę, aby strona trzecia wywołała funkcję C # - w pewien sposób próbuję przekonwertować wskaźnik funkcji na blok, aby strona trzecia mogła go uruchomić lub utworzyć jakiś most - utworzyć własny blok, który działa ten wskaźnik funkcji i daj go stronie trzeciej. Nie mogę znaleźć sposobu, aby to zrobić - w jaki sposób wygenerowałbym blok z informacjami o tym, która funkcja ma zostać uruchomiona, a następnie przekazałem ją osobie trzeciej. Może jest dla mnie inna opcja?

Edycja: Umieszczenie funkcji w zmiennej globalnej może działać, ale chcę mieć wiele takich funkcji, ponieważ interfejs API innej firmy jest asynchroniczny i nie chcę, aby wywoływało niewłaściwe wywołanie zwrotne.

Kod, którego próbowałem:

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

A potem to robię

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

I kończy się niepowodzeniem z BAD_ACCESS. Może robię coś złego, ponieważ nie jestem jeszcze biegły w Obj-C. Mogę potwierdzić, że wywołanie zwrotne jest poprawne, jeśli zostanie uruchomione bezpośrednio i że blok jest wywoływany, ale nie działa w linii funkcji (wyniku).

questionAnswers(3)

yourAnswerToTheQuestion