2011-09-19 41 views
0

我有两个库调用全局变量,以简化: libA.lib,libB.libÇLIB在另一个lib中

力霸具有功能:

void read(num,*val){ 
*val=Globalval[num]; 
... 
} 

libB:

void write(num,val){ 
Globalval[num]=val; 
... 
} 

这是我想达到的目的。这两个库被包含在我的主项目文件中,并且这些函数被单独调用。那么我如何完成这项工作呢?如果这两个库是相同的库,则只需要一个简单的全局变量。

我使用Microsoft Visual工作室

+0

你有什么试过,什么不工作?这个场景的工作原理 - 你可以在共​​享头文件中声明全局变量,在一个库中定义它们,并在静态链接的任何东西中使用它们。 – Michael

+0

更糟的是,这是不好的库设计呢? – asveikau

+0

@asveikau我并没有完全按照陈述的内容去做,只是想弄清楚如何从其他库中调用变量。如果这样做的行为被称为糟糕的设计,那么为什么这样的功能会被允许?请评论,如果你有更多建设性的批评。 – mugetsu

回答

1

在文件中,可能是写一个(libB)的另外一个(或任何其他文件),把这样的事情:

int Globalval[SIZE]; 

在其头文件,它应该是通过力霸包括,把这个:

extern int Globalval[]; 

如果你的例子真的是你在做什么,虽然,保留这两个功能在同一个文件,并在任何地方,你需要给他们打电话。在这种情况下,您只需将函数原型放在标题中。

+0

是的,我不会准确读写,这是简单的方法来得到我的观点。 – mugetsu

0

你应该能够在你的库之一来使用EXTERN

头文件:

extern int g_myGlobal; 

在库CPP文件之一:

int g_myGlobal; 

然后,您将不得不在一个库中包含头文件想要使用g_myGlobal

+0

我试过这个方法之前,但全球价值从未更新从写入读取。我有一个与extern声明共同的头文件,并在写我设置为1.然而,在我的阅读功能,当我要求它,我得到的价值是0,默认 – mugetsu

+0

也许这是一个线程/ syncronization问题,请尝试将“volatile”的定义添加到 – Matthew

+0

中,以便清楚地说明如果我正确设置了它们。我有一个extern声明global.h文件。这包括在两个库中。在libB中,源具有int g_myGlobal定义。在libA中,我还必须将g_myGlobal定义为int。 LibB的函数设置g_myGlobal = 1和libA的函数printfs它。从这我得到0为全球。我会尝试挥发性,虽然 – mugetsu