我想使用C中的以下代码(使用arm-gcc编译)
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中使用objective-c库(比如在c中使用c ++库)?
答案 0 :(得分: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)我没有检查Objective-c代码是否真的有意义。
答案 1 :(得分:0)
您可以为所需内容创建一个包装器界面 - 就像在C ++中一样 - >下进行。