如何在c / c ++中的函数调用之间使变量值持久化

时间:2015-03-21 11:17:36

标签: c++ c

我有以下szenario。 我从IBM Notes应用程序(Lotusscript)调用DLL中的函数。

其中一个函数使用类型结构,我们在64Bit上遇到问题。 TYPE中的所有值只能传递给函数ByRef,但我需要传递值ByVal。

所以我决定在函数头中为每个值都有单个参数。到现在为止还挺好。我有大约43个参数,但LS只能处理31 ...

接下来的想法是在调用注册新用户的函数之前调用INIT_REG_PERSON_INFO(arg1,arg2,...)。

INIT_REG_PERSON_INFO(arg1,arg2, ... );
INIT_REG_ID_INFO(arg1,arg2, ... );
REGISTER_USER();

在C中,我有一个函数(我知道,只有一个参数,但它只用于测试)

    /*====================================================================================*/
    /* FUNCTION: BCC_InitRegPersonInfo                                                    */
    /*====================================================================================*/
    STATUS LNPUBLIC BCC_InitRegPersonInfo(char *FirstName){
        try {
            //extern char *REG_PERSON_INFO_FIRSTNAME;
            memset(&reg_person_info, 0, sizeof (reg_person_info));
            reg_person_info.FirstName = FirstName;

            return NOERROR;

        } catch (...)    {
            LogEventText("* BCC_InitRegPersonInfo::Exception *", NULLHANDLE, NOERROR);
            return 1;
        }
    }

将reg_person_info声明为全局变量

REG_PERSON_INFO reg_person_info;

稍后,在我的REGISTER_USER()中,我尝试从全局变量

中访问该值
LogEventText("* BCC_RegNewPerson1():reg_person_info.FirstName = %s", NULLHANDLE, NOERROR,
                    reg_person_info.FirstName);

但价值总是空的。我假设,只要我退出INIT_REG_PERSON_INFO(arg1,arg2,...),就删除/重置变量;

如何在函数调用之间保持值持久?

2 个答案:

答案 0 :(得分:1)

您需要为extern结构创建reg_person_info al链接。通过这种方式,你隐含地说“我希望所有声明它的单位都可以使用它,包括主声明单元”。

在开头的文件中:

STATUS LNPUBLIC BCC_InitRegPersonInfo(char *FirstName){...}

只需输入extern typeOfReg_Person_Info reg_person_info;

即可

根据您的代码段的外观,我假设您已在头文件中的某处声明了reg_person_info,并且#include您需要的头文件?一旦我在问题中看到更多代码,我就会更新我的答案。

答案 1 :(得分:0)

我经常看到并经常用于在单位之间共享全局变量的做法是:

/* globals.h */
#ifndef EXTERN
#define EXTERN extern
#endif

EXTERN int gMyGloablVar;

/* some-other-C-file */
#include "globals.h"

/* main.c */
#define EXTERN
#include "globals.h"

在main.c中分配存储空间;在所有其他编译单元中,它们的变量被声明为extern,因此是已知的。在链接时,链接器修复了对main中变量的所有引用。