我有以下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(®_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,...),就删除/重置变量;
如何在函数调用之间保持值持久?
答案 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中变量的所有引用。