MAC开发动态调用dylib

本文介绍了如何在MAC环境下创建并使用dylib动态库。首先,创建了一个名为TestDylib的dylib工程,接着定义了接口文件MyProtocol.h。然后,在另一个Application工程Example中,成功在AppDelegate.m中实现了对dylib的调用,展示了dylib在实际应用中的使用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,创建一个dylib的工程, 工程名为 TestDylib

2,创建一个接口文件 MyProtocol.h

#import <Foundation/Foundation.h>

@protocol MyProtocol <NSObject>
-(void)sayHello;
@end

3,创建一个.h的文件 MyObjectInstance.h, 这个方法是用来初始化对象的时候调用,这样就可以不用include对象的头文件。

#ifndef TestDylib_MyObjectInstance_h
#define TestDylib_MyObjectInstance_h

#import <Foundation/Foundation.h>
#import "MyProtocol.h"
#import "TestDylib.h"

extern id<MyProtocol> get_MyObjectInstance(void);

#endif

4, 创建一个NSObject, TestDylib.h TestDylib.m, 在TestDylib.m中实现
get_MyObjectInstance函数

#import <Foundation/Foundation.h>
#import "MyProtocol.h"
#import "MyObjectInstance.h"

@interface TestDylib : NSObject<MyProtocol>{

}
@end

#import "TestDylib.h"

@implementation TestDylib

- (id)init{
    self = [super init];
    if (self) {
       
    }
    return self;
}

-(void)sayHello{
    NSLog(@"Hello World");
}
@end


extern id<MyProtocol> get_MyObjectInstance(void){
    TestDylib *test = [[TestDylib alloc] init];
    return [test autorelease];
}

5, build project, 将dylib文件拷贝到桌面

6, 创建一个Application工程 Example, 在AppDelegate.m中调用dylib

#import "AppDelegate.h"
#import "MyObject.h"
#include <stdio.h>
#include <dlfcn.h>
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import "MyProtocol.h"


@implementation AppDelegate

@synthesize window = _window;

- (void)dealloc{
    [super dealloc];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    NSString *dyPath = @"/Users/Leon/Desktop/TestDylib.dylib";
    void *handle = dlopen([dyPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_LAZY);
    if (handle) {
        NSLog(@"open dylib success");
        id<MyProtocol>(*function)() = dlsym(handle, "get_MyObjectInstance");
        if (function) {
            NSLog(@"open function success");
            id<MyProtocol> testDylib = (id<MyProtocol>)function();
            if (testDylib) {
                [testDylib sayHello];
            }
        }
        dlclose(handle);
    }
}

@end




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值