2011-02-26 2 views
1

나는 다음과 같은 코드가 포함 된 dylib했습니다 : 나는 dylib를 컴파일하고 다른 프로젝트에 넣어 한Obj-C 응용 프로그램에서 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를 호출하고 메소드 중 일부를 호출하십시오.
누구든지이 작업을 수행하는 방법을 알고 있습니까?
감사합니다,
매트

답변

1

그냥 fyi : 동적 라이브러리는 런타임에로드됩니다. 코드를 동적으로로드 할 필요가 없으면 정적으로 링크하십시오. 어쨌든

:

#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 참조)

+0

코드가 작동하지 않습니다. 내 코드를 게시 하겠지만 코드 태그를 수행하는 방법을 알아낼 수는 없습니다. – Matt

+0

"작동하지 않는 것으로 나타남"을 정의하십시오. –

+0

나는 Test 객체를 전역으로 생성 할 수 있도록 설정했기 때문에 호출해도 삐 소리가 나지 않는다. – Matt

관련 문제