怪哉!!!在C++ Builder 4中,为什么一打Application->Title,程序就不能运行?

saucerman 2000-03-05 11:41:00
在C++ Builder 4中,以下的语句没问题——

Application->Title="OK!!!"

但为什么其他情况下,一打入Application->Title,程序就不能运行?
比如:键入如下两句:

char* AppTitle;
StrPCopy(AppTitle,Application->Title);

AnsiString ATtl;
ATtl=Application->Title;

都会使BCB的IDE中的Run功能失效,并且修改内容无法存盘。
难道就没有办法将Application->Title赋给一个变量了吗?
...全文
221 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
radish 2000-03-05
  • 打赏
  • 举报
回复
不怪,你自己的语法有问题。
1、你用char* 没有申请内存空间
2、Application->Title是一个char *,从 char *转到AnsiString 应用如下语句
AnsiString ATtl;
ATtl=Application->Title.c_str();
saucerman 2000-03-05
  • 打赏
  • 举报
回复
//------------------------------------------------------------------------
#include <vcl.h>
#include <shellapi.h>
#include <dir.h>
#include <string.h>
#include "Face.h"
#include "Login.h"
#include "Main.h"
#include "Req.h"
#include "Job.h"
#include "Sys.h"
#pragma hdrstop
USERES("OASIS.res");
USEFORM("Face.cpp", frmFace);
USEFORM("Login.cpp", PasswdDlg);
USEFORM("Req.cpp", ReqForm);
USEFORM("Main.cpp", frmMain);
USEFORM("Job.cpp", JobForm);
USEFORM("Sys.cpp", SysForm);
USEFORM("DBModl.cpp", dtmodEGM);
USEFORM("JobTask.cpp", frmJobTask);
USEFORM("Query.cpp", QueryForm);
//------------------------------------------------------------------------
HINSTANCE g_hinst;
AnsiString ATtl;
int lRes;
bool CrtMutex(void);
void DstrMutex(void);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE hInstance, LPSTR, int)
{
if(CrtMutex())
{
try
{
DateSeparator='.';
ShortDateFormat="yyyy.mm.dd";
LongDateFormat="yyyy.mm.dd";
TwoDigitYearCenturyWindow=70;
Application->Initialize();
g_hinst = hInstance;
if(ParamStr(1)=="-t" and and ParamStr(1)=="-T")
{
//char* AppTitle;
//StrPCopy(AppTitle,Application->Title);
//AnsiString ATtl;
//ATtl=Application->Title;
//AnsiString ATtl;
//ATtl=Application->Title.c_str();
PasswdDlg=new TPasswdDlg(Application);
lRes=SetWindowRgn(PasswdDlg->Handle,CreateEllipticRgn(30,30,400,280),true);
Application->CreateForm(__classid(TdtmodEGM), &dtmodEGM);
Application->CreateForm(__classid(TfrmMain), &frmMain);
Application->CreateForm(__classid(TQueryForm), &QueryForm);
Application->CreateForm(__classid(TSysForm), &SysForm);
Application->CreateForm(__classid(TfrmJobTask), &frmJobTask);
Application->CreateForm(__classid(TJobForm), &JobForm);
Application->CreateForm(__classid(TReqForm), &ReqForm);
ShowWindow(Application->Handle,SW_HIDE);
Application->ShowMainForm=false;
Application->Run();
}
else
{
frmFace=new TfrmFace(Application);
frmFace->Show();
frmFace->Update();
for(int i=0;i<48000000;i++);
frmFace->Hide();
frmFace->Close();
delete frmFace;
PasswdDlg=new TPasswdDlg(Application);
lRes=SetWindowRgn(PasswdDlg->Handle,CreateEllipticRgn(30,30,400,280),true);
Application->CreateForm(__classid(TdtmodEGM), &dtmodEGM);
Application->CreateForm(__classid(TfrmMain), &frmMain);
Application->CreateForm(__classid(TQueryForm), &QueryForm);
Application->CreateForm(__classid(TSysForm), &SysForm);
Application->CreateForm(__classid(TfrmJobTask), &frmJobTask);
Application->CreateForm(__classid(TJobForm), &JobForm);
Application->CreateForm(__classid(TReqForm), &ReqForm);
PasswdDlg->ShowModal();
PasswdDlg->Update();
}
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
else
{
DstrMutex();
}
return 0;
}
//------------------------------------------------------------------------
bool CrtMutex(void)
{
THandle Mutex,PrevInstHandle;
char* AppTitle;
StrPCopy(AppTitle,Application->Title);
Mutex=CreateMutex(NULL,false,AppTitle);
if(GetLastError==ERROR_ALREADY_EXISTS and and Mutex==0)
{
return false;
SetWindowText(Application->Handle,"");
PrevInstHandle=FindWindow(NULL,AppTitle);
if(PrevInstHandle!=0)
{
if(IsIconic(PrevInstHandle))
{
ShowWindow(PrevInstHandle,SW_RESTORE)
}
else
{
BringWindowToTop(PrevInstHandle);
}
SetForegroundWindow(PrevInstHandle);
}
if(Mutex!=0)
{
Mutex=0;
}
}
else
{
return true;
}
//StrDispose(AppTitle);
}
//------------------------------------------------------------------------
void DstrMutex(void)
{
THandle Mutex;
char* AppTitle;
StrPCopy(AppTitle,Application->Title);
Mutex=CreateMutex(NULL,false,AppTitle);
if(Mutex!=0)
{
CloseHandle(Mutex);
ShowMessage("Sorry, There is already the Program running!!!");
}
//StrDispose(AppTitle);
}
//------------------------------------------------------------------------
radish 2000-03-05
  • 打赏
  • 举报
回复
www.inprise.com 有PATCH1及PATCH2(国内我就不知道有没有)
另我的BCB4是ENTERPRISE版的,HELP-》ABOUT会显示UPDATE PACTH?的
saucerman 2000-03-05
  • 打赏
  • 举报
回复
PATCH2?---是BCB的补丁包吗?从哪能弄到?从什么地方能看到是不是PATCH2?
Help->About吗?
radish 2000-03-05
  • 打赏
  • 举报
回复
这段代码我试过的,你的BCB有没有打PATCH?我的打了PATCH二的。
如果你的代码不大的话,你贴出来看看。
saucerman 2000-03-05
  • 打赏
  • 举报
回复
机器怎么样这么慢呢?害得我一性急传了三遍上去,唉!
saucerman 2000-03-05
  • 打赏
  • 举报
回复
radish大侠:

再次幸会了!我一直没忘你以前的热心相助!
Application->Title本身就可以直接用为AnsiString型。
如果要转换表示为C的字符串才需要在后面加.c_str()。
我将您的回答复到我的BCB 4环境,IDE的Run按钮马上不可用。
另外即使将变量声明为C的字符数组,也通不过。
而相同语句,在D5中用Application.Title却轻松通过!
:-<
radish,您真的试过了吗?真真真试过了再给我真结论,好吗?
我开始有点怀疑是BCB 4 里的大Bug了!
saucerman 2000-03-05
  • 打赏
  • 举报
回复
radish大侠:

再次幸会了!我一直没忘你以前的热心相助!
Application->Title本身就可以直接用为AnsiString型。
如果要转换表示为C的字符串才需要在后面加.c_str()。
我将您的回答复到我的BCB 4环境,IDE的按钮马上不可用。
另外即使将变量声明为C的字符数组,也通不过。
而相同语句,在D5中用Application.Title却轻松通过!
:-<
radish,您真的试过了吗?真真真试过了再给我真结论,好吗?
我开始有点怀疑是BCB 4 里的大Bug了!

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧