|
主程序cpp文件如下: #include <vcl.h> #include "Login.h" #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("Main.cpp", MainForm); USEFORM("DM.cpp", MD); /* TDataModule: File Type */ USEFORM("Login.cpp", LogForm); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); TLogForm *LogForm = new TLogForm(Application); try { if (LogForm->ShowModal() !=mrOk) { delete LogForm; return 0; } } catch(...) { delete LogForm; } delete LogForm; Application->CreateForm(__classid(TMD), &MD); Application->CreateForm(__classid(TMainForm), &MainForm); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //--------------------------------------------------------------------------- 因为,登录窗口是在主窗口创建之前new出来的,访问主窗口的变量会出现内存泄漏,如果是在登录窗口,new主窗口,可以访问,因为是new出来的,地址不同,所以delete后,根本不能改变主窗口的变量的值,向各位兄弟姐妹求教 |
|
|
|
把全局变量a放在LogForm.cpp或者project1.cpp中!
|
|
|
在MainForm.cpp定义:
int a; 在Project1.cpp中定义: extern int a; 这样就可以了。 也就是在需要用到的地方只要定义为: extern int a;即可。 |
|
|
把LogForm放到
__fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { LOGSYS();.....//放到这里; } |
|
|
支持Wingsun(孙春阳)老大!
|
|
|
为什么不修改你的LoginForm的构造函数,把a作为参数传递进去呢?不推荐使用全局变量
|
|
|
你那个所谓的全局变量到底是TMainForm的成员还是真的全局变量?
如果是TMainForm的成员,则可以: 将Application->CreateForm(__classid(TMainForm), &MainForm);放在登录窗口创建前; 如果是真的全局变量,最好采用TopCat(令狐虫)的意见。 |
|
|
同意 Wingsun(孙春阳)
|
|
|
同意 Wingsun(孙春阳) 的做法
最基本的使用…… |
|
|
少用全局变量。
实在要用就加extern申明。 |
|
|
去看一下extern的用法
|
|
|
完全不用全局变量是可笑的
|
|
|
无聊
|
|