//.h檔案
#ifdef MYCLASS_EXPORTS
#define DLL_CLASS __declspec(dllexport)
#else
#define DLL_CLASS __declspec(dllimport)
#endif
class DLL_CLASS myclass
{
static vector<int> v;
}
//在.cpp檔案中也定義了v
vector<int> myclass::v;
使用v的時候會崩,后來用自己定義了個類class A做測驗,發現宣告為類的靜態成員變數,不會呼叫建構式。
就是說vector的建構式沒有被呼叫。
而在我做的測驗工程里,在使用前是會呼叫建構式的。
為什么會這樣?
另外,也試了在定義v的時候匯出
DLL_CLASS vector<int> myclass::v;
也不行。
一般如果是沒匯出定義的話,是鏈接不過,我這個是能編譯、鏈接通過,運行時崩潰,原因是變數建構式沒執行。
http://stackoverflow.com/questions/21454555/c-constructor-of-static-member-class-not-called
有老外和我有同樣的問題
uj5u.com熱心網友回復:
為什么要 static ?uj5u.com熱心網友回復:
不是沒呼叫,而是static 類成員的特殊性造成,客戶端無法正常訪問dll里面的類的static成員解決方案:
對那個static 成員做一個get set 訪問器
uj5u.com熱心網友回復:
關注一下!!!uj5u.com熱心網友回復:
都是導c介面,不敢用c++。怕uj5u.com熱心網友回復:
匯出函式要C兼容,否則都是坑匯出class無疑是給自己挖坑
uj5u.com熱心網友回復:
不用靜態試試呢,或者加一個初始化函式,來初始化所有成員變數uj5u.com熱心網友回復:
你能夠編譯通過嗎?你的 std::vector 是模板,不是 __declspec( dllexport ) 的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/109584.html
標籤:進程/線程/DLL
