簡體   English   中英

如何在c ++項目之間共享類?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM