【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*);