我一直想建立一个共享库,利用类来保持其功能的清晰性(它可能需要许多输入或处理),尽管我仍希望针对C平台进行目标设置。
如果我在所有原型上应用extern "C" {},并提供一组暴露的函数作为类函数的模拟,以便对象不“必须”使用我的库,那么这些普通函数能够在链接到它的C程序中工作吗?
我一直想建立一个共享库,利用类来保持其功能的清晰性(它可能需要许多输入或处理),尽管我仍希望针对C平台进行目标设置。
如果我在所有原型上应用extern "C" {},并提供一组暴露的函数作为类函数的模拟,以便对象不“必须”使用我的库,那么这些普通函数能够在链接到它的C程序中工作吗?
class MyClass
{
public:
MyClass(float x) {...}
void method(int x) {...}
~MyClass() {...}
};
#define MYAPI extern "C" __declspec(dllexport) //or whatever the syntax is for your compiler
MYAPI MyClass* CreateMyClass(float x)
{
return new MyClass(x);
}
MYAPI void MyClass_method(MyClass* p, int x)
{
return p->method(x);
}
MYAPI void DestroyMyClass(MyClass* p )
{
delete p;
}
#ifdef __cplusplus
extern "C" {
#endif
void foo();
#ifdef __cplusplus
}
#endif