Блоки ObjC и обратные вызовы openssl C

Есть простой -от задач, которым нужен индикатор выполнения. OpenSSL имеет полезный обратный вызов, который можно использовать для этого:

rsa=RSA_generate_key(bits,RSA_F4,progressCallback,NULL);

с

static void callback(int p, int n, void *arg) {
   .. stuff

Однако я хочу вызвать это из ObjectiveC без лишних слов:

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.mode = MBProgressHUDModeAnnularDeterminate;
    hud.labelText = @"Generating CSR";

    [self genReq:^(int p,int n,void *arg) {
            hud.progress = --heuristic to guess where we are --
    } completionCallback:^{
            [MBProgressHUD hideHUDForView:self.view animated:YES];
    }];

С Genrec :в качестве метода objC:

-(void)genReq:(void (^)(int,int,void *arg))progressCallback 
      completionCallback:(void (^)())completionCallback 
{
   .....
    rsa=RSA_generate_key(bits,RSA_F4,progressCallback,NULL);
    assert(EVP_PKEY_assign_RSA(pkey,rsa));
    rsa=NULL;
   ....

   completionCallback();
}

Теперь завершениеCallback (); работает великолепно и как ожидалось. Но я получаю предупреждение/ошибку компилятора, которую я не могу подавить для обратного вызова прогресса :

 Passing 'void (^__strong)(int, int, void *)' to parameter of incompatible type 'void (*)(int, int, void *)'

. Мне любопытно --, как это сделать?

Спасибо,

Дв.

6
задан Dirk-Willem van Gulik 4 May 2012 в 08:25
поделиться