[英]how to share class between c++ projects?
我的VS2012解决方案包含几个VC ++项目。 我还有许多需要共享的常见文件。 分享枚举和结构很容易。 我只是“包含”相应的头文件,就是这样。 我甚至不需要编译我的“公共”项目!
但是如果我需要共享包含.h和.cpp文件的更复杂的类,那么需要编译呢?
最复杂的问题 - 我可以共享线程安全的单例吗? 我想从不同的线程(但来自一个进程)从不同的项目访问它。
我想我应该使用静态或动态链接之类的东西,但我不确定。 可能有人可以链接一步一步的教程来解决这个问题?
我更喜欢可移植的东西,因为我稍后会将整个解决方案移植到Linux。
包含要共享的类的项目应导出其符号。 在Visual Studio中创建DLL项目时,可以为其提供“导出”符号选项,并提供一些样板代码供您使用。
实质上,在您的库头文件中,它将为您提供:
// myapi.h
#if defined(MYAPIEXPORTS)
#define MYAPI __declspec(dllexport)
#else
#define MYAPI __declspec(dllimport)
#endif
'MYAPIEXPORTS'由向导提供,但它只是库本身的编译器预处理器指令。 因此,当您编译库时, MYAPI
用于导出, MYAPI
文件包含在您的其他项目中时,它将用于导入。
现在让我们看一下你想要分享的课程。
// myclass.h
class MYAPI MyClass
{
public:
MyClass();
~MyClass();
};
// myclass.cpp
#include "myClass.h"
MyClass::MyClass() { /* ... */ };
MyClass::~MyClass() { /* .... */ }
然后,您的其他项目需要链接生成的生成的.lib文件。
请注意,如果template<>
类完全包含在头文件中,则不会将其导出。 这将表现得像你的枚举和typedef。
要回答问题的第二部分,是的,您的图书馆中定义的单身人士也可以访问主项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.