«Преобразование» указателя функции на блок в target-C

Я делаю Interop из Mono C # в Obj-C и столкнулся с этой проблемой. Код C # должен передать обратный вызов - что он делает с указателем на функцию. Я могу получить указатель на функцию со стороны Obj-C и вызвать его, и все работает. Но теперь мне нужно дать указатель на эту функцию в качестве обратного вызова для стороннего API, который работает с блоками в качестве обратного вызова. Я хочу, чтобы третье лицо вызывало функцию C # - так, чтобы яЯ пытаюсь либо преобразовать указатель функции в блок, чтобы его мог запустить сторонний разработчик, либо создать своего рода мост - создать свой собственный блок, который запускает указатель этой функции, и передать его третьему лицу. Я могу'Кажется, я не могу найти способ сделать это - как мне сгенерировать блок с информацией о том, какую функцию запустить, и затем передать его третьему лицу. Может бытьЕще один вариант для меня?

Изменить: Помещение функции в глобальную переменную может работать, но я хочу иметь возможность иметь множество из них, так как сторонний API является асинхронным, и я нене хочу, чтобы он вызывал неправильный обратный вызов.

Код, который я пробовал:

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

А потом я запускаю это с

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

И это не с BAD_ACCESS. Может я'я делаю что-то не так, как яЯ еще не очень хорошо знаю Obj-C. Я могу подтвердить, что обратный вызов в порядке, если выполняется напрямую, и что вызывается блок, но он не работает в строке функции (результата).

Ответы на вопрос(3)

Ваш ответ на вопрос