[英]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.