Tekkaman

导航

 

dylib如何导出C++Class

 1、C++类成员函数必须为virtual。因为virtual函数在编译期会转换成偏移,偏移是可以跨平台的。而非virtual函数,则会直接通过符号去寻找,各个平台编译器对C++函数名符号的改写规则并不一致,可能导致找不到符号的情况。

 2、必须提供工厂函数。因为C++构造析构函数符号被改写后,无法被找到,只有dylib模块内部才能找到。

 3、看一个导出头文件的Demo。

 1 /* File: Person.h */
 2 class Person {
 3     private:
 4         char _person_name[30];
 5     public:
 6         Person();
 7         Person(char* name);
 8         virtual void set_name(char person_name[]);
 9         virtual char* name();
10 };
11  
12 // Constructor functions and function types.
13 extern "C" Person* NewPerson(void);
14 typedef Person * Person_creator(void);
15 extern "C" Person* NewPersonWithName(char name[]);
16 typedef Person * PersonWithName_creator(char name[]);
17  
18 // Destructor function and function type.
19 extern "C" void DeletePerson(Person* person);
20 typedef void Person_disposer(Person*);

 

posted on 2013-05-08 10:04  Tekkaman  阅读(1564)  评论(0编辑  收藏  举报