[問題] DLL共用記憶體和DLL內宣告全域變數含意有一樣嗎?

看板C_and_CPP (C/C++)作者 (傻傻)時間16年前 (2009/11/23 14:20), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
爬了好多文對於dll內的全域變數還是不太瞭解所以想想請教各位大大 一般討論的DLL共用記憶體好像大部分都是針對行程間或不同程式間的共享記憶體 通常都是用下列用法 #pragma data_seg ("my_share_area") int count = 0; #pragma data_seg() #pragma comment(linker, "/SECTION:my_share_area,RWS") 這跟所謂在dll內宣告一個全域變數差別在哪@@? 我在msdn上查到下面寫法還有一些網路資料 http://www.mydianping.com/bbsinfo240006-53612.html 但我依照如此作法一直失敗所以想請教大家 #define DllImport __declspec( dllimport ) #define DllExport __declspec( dllexport ) DllExport void func(); DllExport int i = 10; DllImport int j; DllExport int n; =======我的dll程式========= double m,n; __declspec(dllexport) double __stdcall Count() { double sum = 0; for (m ; m <= n ; m++) sum += m; return sum; } ======引用dll的程式========= typedef double(__stdcall* ptr)(); __declspec(dllimport) double m; __declspec(dllimport) double n; ptr cnt; HINSTANCE dll; void __fastcall TForm1::Button1Click(TObject *Sender) { dll = LoadLibrary("test.dll"); cnt = (ptr)GetProcAddress(dll,"Count"); if(dll!=NULL) ShowMessage("DLL Load Finish"); Edit1->Text = cnt(); Edit1->Text = m; //==>是否有辦法直接引用dll內的m,n? } 對於dll內m跟n是全域變數,但在我引用dll的主程式內m跟n算是全域變數還是區域變數? 要如何作才能在Button1Click內正確引用m跟n? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.112.66

11/23 17:07, , 1F
double *pm = (double *)GetProcAddress(dll,"m");
11/23 17:07, 1F

11/23 17:07, , 2F
Edit1->Text = *pm;
11/23 17:07, 2F

11/23 17:08, , 3F
這樣呢?
11/23 17:08, 3F
文章代碼(AID): #1B2YcoD4 (C_and_CPP)
文章代碼(AID): #1B2YcoD4 (C_and_CPP)