C++ 为什么我的全局变量(在dll和exe之间共享)没有更改?

C++ 为什么我的全局变量(在dll和exe之间共享)没有更改?,c++,windows,dll,global-variables,C++,Windows,Dll,Global Variables,我试图在my_exe.exe和my_dll.dll之间共享一个全局变量。我希望对my_var在my_exe.cpp中所做的更改在运行时反映在my_dll.cpp中。我希望exe将dll加载到它的地址空间中,从而使my_var在2之间共享。但是,对my_var所做的更改不会反映在任何一方。我正在将mydll.lib添加到my_exe项目的链接器输入中。 my_exe.cpp extern __declspec(dllimport) float my_var; typedef void (*call

我试图在
my_exe.exe
my_dll.dll
之间共享一个全局变量。我希望对
my_var
my_exe.cpp
中所做的更改在运行时反映在
my_dll.cpp
中。我希望exe将dll加载到它的地址空间中,从而使
my_var
在2之间共享。但是,对
my_var
所做的更改不会反映在任何一方。我正在将mydll.lib添加到my_exe项目的链接器输入中。
my_exe.cpp

extern __declspec(dllimport) float my_var;
typedef void (*called_from_exe)();

int main()
{
    HMODULE my_dll = LoadLibraryW("my_dll.dll");
    called_from_exe = (called_from_exe_t)GetProcAddress(my_dll, "called_from_exe");

   my_var = 7.f;
   called_from_exe();
}
__declspec(dllexport) float my_var = 2.f;

extern "C" __declspec(dllexport) void called_from_exe()
{
   print(my_var) // prints 0.00 instead of 7.00
}
my_dll.cpp

extern __declspec(dllimport) float my_var;
typedef void (*called_from_exe)();

int main()
{
    HMODULE my_dll = LoadLibraryW("my_dll.dll");
    called_from_exe = (called_from_exe_t)GetProcAddress(my_dll, "called_from_exe");

   my_var = 7.f;
   called_from_exe();
}
__declspec(dllexport) float my_var = 2.f;

extern "C" __declspec(dllexport) void called_from_exe()
{
   print(my_var) // prints 0.00 instead of 7.00
}

抱歉,我忘了提到我正在链接.lib。我修改了我的帖子以表明这一点。当你动态加载库时,你不是传统意义上的链接。我想您会发现,您可以在加载库之前写入我的_var。您的地址空间中唯一的共享符号称为_from_exeRelated(可能重复):。尤其是得票最高的答案。@AdrianMole我的问题只涉及一个过程,即
My_exe.exe
。DLL被加载到
my_exe.exe
的地址空间,一旦加载,它就是地址空间的一部分。@stark看起来你是对的。如果我使用
dllexport
dllimport
而不是
LoadLibrary
导出/导入函数,我可以在该函数内部修改
my_var
,更改会反映在两侧。但为什么会有所不同?我认为这只是两种不同的动态链接方式。