2010-12-20 104 views
0

我有一個簡單的問題,即如何將C語言函數引用作爲C函數指針傳遞,以便C可以調用該函數。將函數引用傳遞給C指針類型,C將調用函數

編輯:對不起,這裏不提供樣品來源,它是:

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

將指向on_work_done功能會用C

static void cWorkDone(const char *workInfo); 

有這樣的簽名,而在objective- C這是我製作的簽名

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

現在我想要指向cLib.on_work_done指向objective-c函數,如果指向標準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; 
相關問題