„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).