作者kyokb (傻傻)
看板C_and_CPP
标题[问题] DLL共用记忆体和DLL内宣告全域变数含意有一样吗?
时间Mon Nov 23 14:20:32 2009
爬了好多文对於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
1F:推 Kerlifw:double *pm = (double *)GetProcAddress(dll,"m"); 11/23 17:07
2F:→ Kerlifw:Edit1->Text = *pm; 11/23 17:07
3F:→ Kerlifw:这样呢? 11/23 17:08