网络文章的转载备份

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

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

[cpp]  view plain copy
  1. #import <Foundation/Foundation.h>  
  2.   
  3. @protocol MyProtocol <NSObject>  
  4. -(void)sayHello;  
  5. @end  

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

[cpp]  view plain copy
  1. #ifndef TestDylib_MyObjectInstance_h  
  2. #define TestDylib_MyObjectInstance_h  
  3.   
  4. #import <Foundation/Foundation.h>  
  5. #import "MyProtocol.h"  
  6. #import "TestDylib.h"  
  7.   
  8. extern id<MyProtocol> get_MyObjectInstance(void);  
  9.   
  10. #endif  

4, 创建一个NSObject, TestDylib.h TestDylib.m, 在TestDylib.m中实现
[cpp]  view plain copy
  1. get_MyObjectInstance函数  

[cpp]  view plain copy
  1. #import <Foundation/Foundation.h>  
  2. #import "MyProtocol.h"  
  3. #import "MyObjectInstance.h"  
  4.   
  5. @interface TestDylib : NSObject<MyProtocol>{  
  6.   
  7. }  
  8. @end  

[cpp]  view plain copy
  1. #import "TestDylib.h"  
  2.   
  3. @implementation TestDylib  
  4.   
  5. - (id)init{  
  6.     self = [super init];  
  7.     if (self) {  
  8.          
  9.     }  
  10.     return self;  
  11. }  
  12.   
  13. -(void)sayHello{  
  14.     NSLog(@"Hello World");  
  15. }  
  16. @end  
  17.   
  18.   
  19. extern id<MyProtocol> get_MyObjectInstance(void){  
  20.     TestDylib *test = [[TestDylib alloc] init];  
  21.     return [test autorelease];  
  22. }  

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

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

[cpp]  view plain copy
  1. #import "AppDelegate.h"  
  2. #import "MyObject.h"  
  3. #include <stdio.h>  
  4. #include <dlfcn.h>  
  5. #import <Foundation/Foundation.h>  
  6. #import <objc/runtime.h>  
  7. #import "MyProtocol.h"  
  8.   
  9.   
  10. @implementation AppDelegate  
  11.   
  12. @synthesize window = _window;  
  13.   
  14. - (void)dealloc{  
  15.     [super dealloc];  
  16. }  
  17.   
  18. - (void)applicationDidFinishLaunching:(NSNotification *)aNotification{  
  19.     NSString *dyPath = @"/Users/Leon/Desktop/TestDylib.dylib";  
  20.     void *handle = dlopen([dyPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_LAZY);  
  21.     if (handle) {  
  22.         NSLog(@"open dylib success");  
  23.         id<MyProtocol>(*function)() = dlsym(handle, "get_MyObjectInstance");  
  24.         if (function) {  
  25.             NSLog(@"open function success");  
  26.             id<MyProtocol> testDylib = (id<MyProtocol>)function();  
  27.             if (testDylib) {  
  28.                 [testDylib sayHello];  
  29.             }  
  30.         }  
  31.         dlclose(handle);  
  32.     }  
  33. }  
  34.   
  35. @end  


调用过程

1, create mac dylib project 

2, click Target -> Build Settings -> Search "Dynamic Library Install Name" and change to "@executable_path/../Frameworks/$(EXECUTABLE_PATH)"

3, build

4, create mac application project

5, add dylib file to application project

6, click Target -> Build Phases -> add Build Phase -> add copy files -> select Destination to "Frameworks" -> drag dylib file 

7, set "Framework Search Paths" to " @executable_path/../Frameworks/ "

8, build.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值