Re: [問題] VC中 程式區段變數初始化問題

看板C_and_CPP (C/C++)作者 (有趣生活)時間19年前 (2005/12/20 13:04), 編輯推噓4(401)
留言5則, 3人參與, 最新討論串1/1
※ 引述《orc1424 (小狗撒尿1424)》之銘言: : 在VC裡面 我寫了一個.dll : 假設我想要把某一段程式(當然這邊單指變數) : 放在可供其他程式(其他藉由dll來存取)讀取的區段 : (就是dll之間的share) : 我必須這樣寫(裡面有個簡單的結構POINT) : 但是如果我不經過初始化 : 他不會認同我把這個變數放在mySection Section : 他會說他找不到mySection Section 那是因為你用錯 section 了 data section 本來就是要放有初始化的變數 如果你想一開始宣告變數,但是不用直接初始化的話 應該使用 bss section,再把變數放在裡面 請查 #pragma bss_seg : //****** 程式碼開始 : #pragma data_seg ("mySection") : POINT pq = { 0, 0 }; : #pragma data_seg () : #pragma comment(linker, "/SECTION:mySection,RWS") : //****** 程式碼結束 : 問題: : 今天還好是一個簡單的POINT我可以這樣初始化 : 如果今天是很複雜的結構咧? : 或是一個超級複雜的class 如果用 C 來寫的話 不想宣告就使用 POINT pq = {0,0} 來定義 struct 內容 大概就得先把 struct 變數,例如宣告一個 POINT pq; 在 bss_seg 之中 然後自己寫個用來設定其各資料成員值的函式 在程式開始後,再自行呼叫那個初始用的函式 如果用 C++ 那 struct 和 class 都可以透過 constructor 來處理初始化的工作 就可以放在 data_seg 了 以下程式片段給你參考一下 (測試過可編譯) class c { public: c(int x,int y) : _x(x),_y(y) {} private: int _x,_y; }; #pragma data_seg("123") c c0(1,2); #pragma data_seg() : 我還是必須用原來的方法嗎? : 還是有更好的解決辦法呢? : 所有錯誤我都會虛心接受指正 謝謝各位的指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.129.20.3 ※ 編輯: UNARYvvv 來自: 140.129.20.3 (12/20 13:12)

12/20 17:43, , 1F
C++ 還可以利用 placement new 來達成
12/20 17:43, 1F

12/20 17:43, , 2F
你可以在 DllMain process attach 時呼叫, detach 時解構
12/20 17:43, 2F

12/20 20:12, , 3F
了解^^ 多謝補充用 C++ 的其他方法~
12/20 20:12, 3F

12/20 22:09, , 4F
感謝以上兩位 謝謝
12/20 22:09, 4F

12/21 18:42, , 5F
XD被m咧 好好玩
12/21 18:42, 5F
文章代碼(AID): #13fv3ZZx (C_and_CPP)
文章代碼(AID): #13fv3ZZx (C_and_CPP)