2012-01-20 17 views
3

私はC(アーム-gccでコンパイル)Objective-CライブラリをC言語で使用する方法はありますか?

NSString *newText; 

CLLocationManager * locationManager = [[CLLocationManager alloc] init]; 
[locationManager startUpdatingLocation]; 
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; 
//[locationManager setDelegate:self]; 

CLLocation* location = [locationManager location]; 

newText = [[NSString alloc] initWithFormat: @"Your Position : %f %f", [location horizontalAccuracy], [location verticalAccuracy]]; 

から以下のコードを使用するには、(CにC++ライブラリを使用してのように)CでのObjective-Cライブラリを使用する方法はありますか?

+1

あなたが使用しているフレームワークの機能のためのc apiはありません(btwは間違って使用しています) – Felix

+1

CでC++ライブラリをどのように使用しますか?その他のポイントObjective-Cは、バニラCから呼び出し可能です。バニラCは、Objective-Cから呼び出し可能です。だからあなたはCのObjective-Cをあなたがリストしたコードを使って使うことができます。 – Tommy

答えて

5

それはあなたがC.

にC++ライブラリを使用するのと同じ方法で、基本的に可能ですラップC APIを提供する必要があります。プレーンなC関数を定義する場合は、別のプレーンなC実行可能ファイルから簡単にアクセス可能でなければなりません。

#ifndef __OBJC__ 
typedef void* id; 
#endif 

id api_getlocation(); 
const char* api_location_to_text(id location); 
void api_free_location(id location); 

とコード(1):

id api_getlocation() 
{ 
    CLLocationManager * locationManager = [[CLLocationManager alloc] init]; 
    [locationManager startUpdatingLocation]; 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; 
    //[locationManager setDelegate:self]; 

    CLLocation* location = [locationManager location]; 
    return [location retain]; 
} 

const char* api_location_to_text(id location) 
{ 
    NSString* newText = [NSString stringWithFormat: @"Your Position : %f %f", [location horizontalAccuracy], [location verticalAccuracy]]; 

    return strdup([newText UTF8String]); 
} 

void api_free_location(id location) 
{ 
    [location release]; 
} 

は、その後、あなたのヘッダファイルを含め、Cコードから、それを使用することができますし、これらのC関数を呼び出す

あなたは、いくつかのヘッダファイルが必要になります。

NB:あなたはObjective-Cのランタイムライブラリとリンクすれば、あなたも直接objc_sendMsgを呼び出すことにより、オブジェクトにメッセージを送信することができるはずですが、これは痛みとなるだろう....

(1)私は客観的なコードが実際に意味をなさないかどうかは確認していません。

+1

Cスタイルの文字列の代わりにCFStringRefを受け入れると、NSStringでフリーダイヤルのブリッジを使用できるようになり、物事はやや簡単になります。 – Tommy

0

あなたは必要なもののラッパー・インターフェースを作成することができます - 彼らはCでやるだけのよう++ - > C.

関連する問題