When you reach that function call ,press F11 and step into the MFC library
and see where it is getting hit.
Following is a correspondence with Mr. Newcomer (thanks allot for the
serious reference and remarks).
Following your remarks I tried to pinpoint the access violation error by
eliminating codes and trial & error. I noticed that the following code may
cause the problem -
CFtpFileFind finder(pConnect);
bWorking = finder.FindFile(NULL);
It may not be obvious but the target machine on which the connection is
established is a VMS machine and not a PC. Remarking out the following
line
stoped the debugger error:
bWorking = finder.FindFile(NULL);
Can you farther advise?
Thanks
Gil
Hint: when posting code for a problem, post the RELEVANT code. For
example, remove
multiple blank lines, all code that is commented out, useless comments,
etc. Make it
single spaced. Indicate where the error occurred (the posting was so long
and tedious
that if you did identify the line on which the error occurred, I missed
it). You have to
show us the RELEVANT code, not just an entire .cpp file! You gave us a
ton of code, and
not the slightest hint as to which line was being executed when the
problem occurred.
It is hard to figure out what you are trying to accomplish here. You
bring up a dialog,
and then no matter what the user does, you go into some loop with a dead
GUI (as in really
dead) with sleeps of 20 minutes built in. You are using printf in a
Windows app, which is
pointless. If you want a console app, then write a console app that has
MFC in it. If
you want a Windows app, write a Windows app. This is neither.
You are declaring static variables with local scope, which is
exceptionally bad style in
Windows programs, and apparently a throwback to bad programming habits
from MS-DOS or Unix
or some other primitive operating system. Do not do this, particularly
when it serves no
detectably useful purpose.
Can you perhaps expalin why your GetCurDirectory specifies a buffer one
character larger
than the actual buffer? Do you enjoy buffer overrun bugs?
You did not specify where LOCAL_DISK_FTP is defined, and why are you
comparing it to
integers like 0, 1 and 2 when you should be using names that actually have
meaning? Have
you heard of #define?
There are so many things wrong with the fundamental structure of this code
that I would
suggest a major restructuring before attempting to solve any problems.
You also have a weird mixture of Unicode-aware code (TCHARs) and 8-bit
only code (e.g.,
char data type, quoted strings without _T() around them, printf). I doubt
this is the
problem, but it's bad style. So is using commas in declaration lists.
Next time, post the relvant code, and ONLY the relevant code; and indicate
where the error
occurred. A call stack backtrace to your code is useful, and when it is
in your code,
show us in the listing what line failed. We cannot learn what is going on
by virbrations
in the psychic ether; you have to give us the data we need, and most
importantly,
eliminate the noise (which this code is full of).
joe
On Thu, 27 Jul 2006 09:25:44 +0200, "Gil" <gil@mandat.com> wrote:
try
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
Yesterday I posted the following, but I didn't supply the code. Here is
the
problem and the code follows.
Thanks in advance for all
I use try catch mechanism and notice (in the debugger) that whenever the
control arrives to the catch section, I get an access violation (error
0xC0000005)even though it skips this section immediately.
I pass compilation without any problems and the program runs fine but
crashes every few hours.
the relevant code
// mfc_concol.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "mfc_concol.h"
#include "mfc_concolDlg.h"
#include <afxinet.h>
#include "tests.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
////////////////////////////////////////////////////////////////////////////
/
// CMfc_concolApp
BEGIN_MESSAGE_MAP(CMfc_concolApp, CWinApp)
//{{AFX_MSG_MAP(CMfc_concolApp)
// NOTE - the ClassWizard will add and remove mapping macros
here.
// DO NOT EDIT what you see in these blocks of generated
code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
////////////////////////////////////////////////////////////////////////////
/
// CMfc_concolApp construction
CMfc_concolApp::CMfc_concolApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
extern BOOL Calculate_Average(CString LastFile);
extern BOOL Calculate_Average_CFile(CString LastFile);
////////////////////////////////////////////////////////////////////////////
/
// The one and only CMfc_concolApp object
CMfc_concolApp theApp;
////////////////////////////////////////////////////////////////////////////
/
// CMfc_concolApp initialization
BOOL CMfc_concolApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
/* delet dlg popup
CMfc_concolDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
*/
CString SubString;
CString curdir("C:\\");;
char CurDirectory[100];
static CString FileName, LastFile,prev_run_last_file;
CTime CreateTime, LastFileTime;
CInternetSession sess(_T("MyProgram/1.0"));
CFtpConnection* pConnect = NULL;
::GetCurrentDirectory((sizeof(CurDirectory) +1), CurDirectory);
while (1)
{
// find out the last file from the seria and bring it
//system("c:\\temp\\ActivateBringFile.bat");
try
{
// debug
if (LOCAL_DISK_FTP == 1)
pConnect =
sess.GetFtpConnection("8.30.0.165","mbt-domain\\66711","JKjk8304");
else if (LOCAL_DISK_FTP == 2)//release amsim
pConnect =
sess.GetFtpConnection("8.8.16.120","system","geler42");
else if (LOCAL_DISK_FTP == 0 || LOCAL_DISK_FTP == 3)//release
amrt2
pConnect =
sess.GetFtpConnection("8.8.16.132","system","HtggFR76");
// test local pc
//GetCurrentDirectory((sizeof(CurDirectory) +1), CurDirectory);
//BOOL res1 = pConnect->SetCurrentDirectory("..\\");
//res1 = pConnect->SetCurrentDirectory("..\\");
//res1 = pConnect->SetCurrentDirectory("..\\");
//res1 = pConnect->SetCurrentDirectory(".\????? T????\mfc_consol");
pConnect->GetCurrentDirectory(curdir);
//res1 = pConnect->SetCurrentDirectory(curdir);
// use a file find object to enumerate files
CFtpFileFind finder(pConnect);
// check if we know the last file name
//res1 = pConnect->SetCurrentDirectory("..\\");
//4-6-06 add going to the right place
BOOL res1;
if (LOCAL_DISK_FTP == 1)
res1 = pConnect->SetCurrentDirectory(".\?????
T????\mfc_consol");
else if (LOCAL_DISK_FTP == 2)//release amsim
res1 = pConnect->SetCurrentDirectory(".\?????
T????\mfc_consol");
else if (LOCAL_DISK_FTP == 3)//release amrt2
res1 =
pConnect->SetCurrentDirectory("SYS$COMMON:[SYSMGR.LESHER]");
else if (LOCAL_DISK_FTP == 0)//release amrt2
res1 =
pConnect->SetCurrentDirectory("DSA2:[USERS.GCS_DATA.TRACK.ON_LINE_MONITOR]")
;
//res1 =
pConnect->SetCurrentDirectory("SYS$COMMON:[SYSMGR.TEMP]");
//res1 =
pConnect->SetCurrentDirectory("dsa2:[users_gcs_data]");
pConnect->GetCurrentDirectory(curdir);
//Last file 5-6-06
//{"AM1_MBT1_20060227_2259.MAG;1"}
// start looping
BOOL bWorking;
// if (LastFile == "")// at the beginning
// bWorking = finder.FindFile(NULL);
// else // after ther first run
// bWorking = finder.FindFile(LastFile);
bWorking = finder.FindFile(NULL);
//1BOOL bWorking = finder.FindFile("AM1_MBT1_20061205_1456.MAG");
bWorking = finder.FindNextFile();
//CString BeforeLastFile = (LPCTSTR) finder.GetFileURL());
//LastFile = finder.GetFileName();
//LastFile = "AM1_MBT1_20060000_0000.MAG";
LastFile = "AM1_MBT1_20063131_0000.MAG";
//CString monthstring, datestring
while (bWorking)
{
// LastFile = "AM1_MBT1_20063131_0000.MAG";
FileName = finder.GetFileName();
//GetCurrentDirectory((sizeof(CurDirectory) +1),
CurDirectory);
//SetCurrentDirectory(CurDirectory);
// TEST
//FileName = "AM1_MBT1_20061205_1456.MAG";
SubString = FileName.Left(9);
if(FileName.Left(9) == "AM1_MBT1_")
{
CString monthstring = FileName.Mid(13,2);
int month = atoi(monthstring);
//if (month >= atoi(LastFile.Mid(13,2)))
if (month <= atoi(LastFile.Mid(13,2)))
{
if (month < atoi(LastFile.Mid(13,2)))
LastFile = FileName;
//continue;
// check date
CString datestring = FileName.Mid(15,2);
int date = atoi(datestring);
//if (date >= atoi(LastFile.Mid(15,2)))
if (date <= atoi(LastFile.Mid(15,2)))
{
if (date < atoi(LastFile.Mid(15,2)))
LastFile = FileName;
//continue;
// check hour
CString hourstring = FileName.Mid(18,2);
int hour = atoi(hourstring);
//if (hour >= atoi(LastFile.Mid(18,2)))
if (hour <= atoi(LastFile.Mid(18,2)))
{
if (hour < atoi(LastFile.Mid(18,2)))
LastFile = FileName;
//continue;
// check minutes
CString minuitstring =
FileName.Mid(20,2);
int minuit = atoi(minuitstring);
//if (minuit >=
atoi(LastFile.Mid(20,2)))
if (minuit <=
atoi(LastFile.Mid(20,2)))
{
LastFile = FileName;
//Bring the file to the PC
if (LOCAL_DISK_FTP == 0 || LOCAL_DISK_FTP == 3)// only in debug
BOOL res = pConnect->GetFile(LastFile,LastFile,
TRUE,FILE_ATTRIBUTE_ARCHIVE,
INTERNET_FLAG_TRANSFER_ASCII,
1);
//open file and read lines 10-16
//4-7-06 remove file at source
BOOL res = pConnect->Remove(LastFile);
//Calculate_Average(LastFile);
if ( prev_run_last_file != LastFile ) // calculate only if new file
Calculate_Average_CFile(LastFile);
prev_run_last_file = LastFile; // calculate only if new file
DeleteFile(LastFile);
LastFile = "AM1_MBT1_20063131_0000.MAG";
}
}
}
}
}
bWorking = finder.FindNextFile();
//CString LastFile = (LPCTSTR) finder.GetFileURL());
}// while (working)
/*
//Bring the file to the PC
if (LOCAL_DISK_FTP == 0 || LOCAL_DISK_FTP == 3)// only in debug
BOOL res = pConnect->GetFile(LastFile,LastFile,
TRUE,FILE_ATTRIBUTE_ARCHIVE,
INTERNET_FLAG_TRANSFER_ASCII,
1);
//open file and read lines 10-16
//4-7-06 remove file at source
BOOL res = pConnect->Remove(LastFile);
//release
//Calculate_Average(LastFile);
if ( prev_run_last_file != LastFile ) // calculate only if new file
Calculate_Average_CFile(LastFile);
prev_run_last_file = LastFile; // calculate only if new file
//BOOL res = pConnect->Remove(LastFile);
*/
pConnect->Close();
}// try
//read lines 10 - 16
catch (CInternetException* pEx)
{
TCHAR sz[1024];
pEx->GetErrorMessage(sz, 1024);
printf("ERROR! %s\n", sz);
pEx->Delete();
}
// sleep 20 minuits
if (LOCAL_DISK_FTP == 0)
Sleep(20*60*1000);
else if (LOCAL_DISK_FTP == 3)
Sleep(20*60*10);
}// while (1)
// open file GCS$DATA:[TRACK.MEASR]AM1_MBT1_2006014_1240.MAG
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}