2010-12-20 20 views
0

私は単純な質問があります。つまり、Cが目的関数をC関数ポインタとして渡すことができます。関数ポインタをCポインタ型に渡すと、C関数が呼び出されます

編集:は、サンプルソースを提供していないため申し訳ありませんがここにある:

- (void)init { 
     CLibStructure cLibObject; 
     cLibObject.on_work_done = &cWorkDone; 
} 

on_work_doneを指すことになる機能がobjective-中のに対し、C

static void cWorkDone(const char *workInfo); 

にこの署名を持っていますCこれは私が作った署名です

- (void) workDoneWithStatusMessage:(const char *message); 

今私はcLib.on_work_doneがobjective-c関数へのポインタを指すことを望んでいます。

答えて

3

要するに、できません。直接ではありません。

メソッド呼び出しは、ターゲットとメッセージするオブジェクトと、呼び出すメソッドを識別するセレクタの組み合わせです。

あなたはそれらを一緒に何とか束ねる必要があります。ブロックを使うと簡単に十分です。純粋なC APIでは、通常、コンテキストポインタなどで処理できます。

コードを公開しなかったため、例はなく、使用されるAPIはなく、C API自体の詳細もなく、詳細を提供することは困難です。

0

あなたがメソッドを呼び出す関数を作成し、そのポインタを操作することができます。

int function(NSObject *something, int someArg) 
{ 
    return [something thisIsAMethod:someArg]; 
    //assuming NSObject has a method called thisIsAMethod that takes an int as a parameter and returns an int. 
} 

、その後、あなたは、この関数へのポインタを使用することができます

int (*pointerToFunction)(NSObject *, int) = &function; 
関連する問題