首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

全局变量可以在不同层(不同工程)之间使用吗? 回调函数呢?该如何解决

2012-02-14 
全局变量可以在不同层(不同工程)之间使用吗? 回调函数呢?全局变量可以在不同层(不同工程)之间使用吗?回调

全局变量可以在不同层(不同工程)之间使用吗? 回调函数呢?
全局变量可以在不同层(不同工程)之间使用吗?   回调函数呢?


请教一个问题,不知道能不能实现:

我把问题抽象化,给大家讲讲:

1.   现在有一个比较复杂的程序,包括三个部分:
        a.   最底层调用了CppUnit   库进行测试
        b.   然后上面封装了一层UI,   做了一个用户界面,可以使用此界面控制底层的测试
                以及输出测试报告
        c.   最上面编写了测试用例,编译后可以被加载到图形界面工具中,进行测试

2.   现在的问题是需要在最后的报告中输出一段字符串,解释整个测试的目的及详细
        信息。这段字符串是在测试用例的头文件中声明定义的。无法修改   c.   测试用例部
        分的代码,因为这部分的API定下来了(原来有许多测试用例已经这么写了,无法
        改动这上千个测试用例部分的代码)

3.   我的想法是在CppUnit最底层的地方某个宏定义中记录下输出的字符串。因为每次
          要输出信息时测试用例头文件里就要调用此宏来输出信息。

问题是:有没有这么定义全局变量的?   在最底层定义一个全局变量来存储字符串,
在UI生成报告时加上存储的字符串,然后输出到报告?

或者有什么别的方法,比如回调函数等等。哪里可以找到回调函数的示例呢?想参考
一下,网上关于回调函数众说纷纭,请大家帮忙!


///   a.   最底层宏定义,输出std::string   anStr(info);   的字符串
#define   BEGIN_PRINTDOC     \
    private:                                                                       \
    static   void   print_doc()                   \
        {                                                                                                                                      


////////////////////////////////////////////////////////////////////////
#define   PRINTDOC(info){       \
        std::string   anStr(info);       \
        CPPUNIT::MyListener::myInstance()-> addInfo(   "PRINTDOC ",   anStr.c_str());   \
        }
////////////////////////////////////////////////////////////////////////
#define   END_PRINTDOC   \
        }                                                                                   \
    public:  


///   c.   测试用例头文件中,用到上面的宏,却无法输出信息,因为此时还没有注册CppUnit
///   的测试。注册CppUnit的测试在测试用例的cpp文件里,不在头文件中。
///   如果把以下宏加到.cpp文件中输出信息就一点问题都没有,可是此测试用例头文件又
///   不能改动!
class   SampleTestCase   :   public   CPPUNIT::TestFixture
{

    BEGIN_PRINTDOC  
            PRINTDOC( "doucumentation   infomation ");
    END_PRINTDOC

    .......................
}

[解决办法]
当然可用,
但是全局容易带入问题,
需要谨慎控制 。。。
------解决方案--------------------


可以使用全局变量,你那个程序就一个进程,所有东西都在一个进程里面
[解决办法]
在一个进程内可以用全局变量,跨进程可以用共享数据段只类的
[解决办法]
预处理、编译和链接,这些基础概念搞清楚,问题就解决了。
[解决办法]
单看这些代码是不知道这些是不是在同一个进程里的。
好好看一下你的程序的流程,搞清楚进程、线程的概念,同时觉得你还应该理清一下运行的程序与静态的代码之间的区别。
这样你才能判断这些是不是在同一个进程里
[解决办法]
问题太具体了,能不能再抽象一点呀
[解决办法]
用进程间通讯的方法吧,网上挺多的,自己找找
[解决办法]
首先你用的开发工具是什么。
如果是VC的话,两个工程就不可能是一个进程
如果是linux下面的话,要看你MAKEFILE怎么写

一个比较简单但是不一定准确的判断方法:看最后生成的EXE文件有几个???


[解决办法]
我是在vc环境下编译的,生成了一个.exe为用户界面程序和一个.dll为单元测试
.exe加载.dll进行测试
-----------------------------------------------------
由于你的exe加载了一个dll进行测试,这个dll实际上被加载到了exe所在进程的地址空间中,与exe位于同一个进程中。并不是说你在vc里有两个工程,就意味着两个进程,这是两个层面上的事情。

我也做过全局变量的测试,虽然编译没有问题,但是还是没有得到正确的结果,所以我认为对于这个多进程的程序而言,不可能用全局变量 (对吗?)
-----------------------------------------------------
你的问题估计处在别的什么地方,你可以做一些简单的测试,确保使用全局变量是可以共享信息的,然后再回到你自己的问题上来。

热点排行
Bad Request.