2

我制作了一个包含以下代码的 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 并将其放在另一个项目中,但我似乎无法弄清楚如何从 dylib 制作一个 Test 对象并调用一些方法。
有人知道怎么做吗?
谢谢,
马特

4

1 回答 1

2

仅供参考:动态库是在运行时加载的。如果您不需要动态加载代码,请静态链接。

反正:

#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

于 2011-02-26T21:30:52.717 回答