Как получить доступ к dylib и использовать его в приложении Obj-C? - PullRequest
2 голосов
/ 26 февраля 2011

Я сделал dylib, который содержит следующий код:

    Test.h:

#import <Cocoa/Cocoa.h>
@interface Test : NSObject {
     int number;
}
-(void)beep;
-(void)giveInt:(int)num;
-(int)takeInt;

@end


Test.m:

#import "Test.h"

@implementation Test

-(void)beep {
     NSBeep();
}
-(void)giveInt:(int)num {
     number = num;
}
-(int)takeInt {
     return number;
}

@end

Я скомпилировал dylib и поместил его в другой проект, но я не могу понять, как сделать Testвозьмите объект из dylib и вызовите некоторые методы.Кто-нибудь знает, как это сделать?Спасибо,Matt

1 Ответ

2 голосов
/ 27 февраля 2011

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

В любом случае:

#import "test.h"
#include <dlfcn.h>

int main(int argc, const char *argv) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    void *handle = dlopen("test.dylib", RTLD_LAZY);
    id t = [[NSClassFromString(@"Test") alloc] init];

    [t beep];
    [t release];

    dlclose(handle);
    [pool drain];
}

Вы захотите включить проверку ошибок, но это основная идея. Если вы хотите использовать NSBundle (который может быть более «правильным» в зависимости от обстоятельств, см. http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFBundles/AccessingaBundlesContents/AccessingaBundlesContents.html)

...