这里先将DLL原代码奉上:
//lib.h头文件
#ifndef LIB_H
#define LIB_H
#ifdef __cplusplus
extern "C" {
#endif
extern __declspec(dllexport) int dllGlobalVar;
extern __declspec(dllexport) int* GetGlobalVar(void);
#ifdef __cplusplus
}
#endif
#endif
//lib.cpp
#include "lib.h"
int dllGlobalVar = 10;
int* GetGlobalVar(void)
{
return &dllGlobalVar;
}
测试程序一dllTest代码
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef int* (*pGetVar)();
#ifdef __cplusplus
}
#endif
int main(int argc, char* argv[])
{
HINSTANCE hLib;
hLib = LoadLibrary("D://siren//Travel//dll//Debug//dll.dll");
pGetVar GetVar;
GetVar = (pGetVar)GetProcAddress(hLib,"GetGlobalVar");
while(1)
{
int* k = GetVar();
printf("k = %ld, *k = %d/n", k,*k);
Sleep(1000);
}
FreeLibrary(hLib);
return 0;
}
测试程序二dllTest1代码
#include <stdio.h>
#include "windows.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef int* (*pGetVar)();
#ifdef __cplusplus
}
#endif
int main(int argc, char* argv[])
{
HINSTANCE hLib;
hLib = LoadLibrary("D://siren//Travel//dll//Debug//dll.dll");
pGetVar GetVar;
GetVar = (pGetVar)GetProcAddress(hLib,"GetGlobalVar");
while (1)
{
int* k = GetVar();
*k = 30;
printf("k = %ld, *k = %d/n", k,*k);
Sleep(1000);
}
FreeLibrary(hLib);
return 0;
}
执行结果如下图:
左边图为DllTest.exe显示,右边是DllTest1.exe显法
我想问的问题是为什么两个不同程序DllTest和DllTest1同时调用同个Lib.DLL时,其中的全局变量的地址一样,却值不相同呢??