假设我在头文件中有一个X.DLL
和以下内容:
extern __declspec(dllexport) int foobar;
这个foobar
全局variables是在一个实现文件中的X.DLL
中定义的:
int foobar = 1;
现在假设我有两个DLL,链接到X.DLL
A.DLL
和B.DLL
,以及使用A.DLL
和B.DLL
的应用程序E.EXE
:
+----> A.DLL ----+ | | E.EXE ----+ +----> X.DLL | | +----> B.DLL ----+
在这种情况下,在A.DLL
和B.DLL
评估的expression式&foobar
( &foobar
地址)是否保证具有相同的值? 换句话说,是X.DLL
的全局variables存储了两次还是只有一个foobar
实例在整个过程中? 另外,如果在加载时或通过调用LoadLibrary
链接DLL,它是否有所作为?
在GCC的dllimport文档中,我也很困惑:
使用此属性的一个缺点是,指向标记为
dllimport
的variables的指针不能用作常量地址。
考虑到我上述的情况,我不太明白这个陈述的含意。
只有一个副本。 但是,一般来说,这是一个非常糟糕的主意,你会遇到很多问题。