Access violation in tee9170.bpl
Access violation in tee9170.bpl
Greetings,
I had used the TeeChart standard edition on C++Builder XE3.
Occasionally, a read access violation was happened in Tee9170.bpl.
This problem was happens in TFastLineSeries@DrawAllValues at every time.
I bought the latest TeeChart PRO for to fix this problem.
Currently this problem still is happened in same place.
Could you please teach how to check the this problem with TeeChart source code by C++ Builder XE3?
Best regards,
Magic
I had used the TeeChart standard edition on C++Builder XE3.
Occasionally, a read access violation was happened in Tee9170.bpl.
This problem was happens in TFastLineSeries@DrawAllValues at every time.
I bought the latest TeeChart PRO for to fix this problem.
Currently this problem still is happened in same place.
Could you please teach how to check the this problem with TeeChart source code by C++ Builder XE3?
Best regards,
Magic
Re: Access violation in tee9170.bpl
Hi
Here is how you could debug the TeeChart sources in BCB:
http://www.teechart.net/support/viewtop ... bug#p47005
If you can isolate the problem in a simple example project we can run as is here, we'll be pleased to take a look at it.
Here is how you could debug the TeeChart sources in BCB:
http://www.teechart.net/support/viewtop ... bug#p47005
If you can isolate the problem in a simple example project we can run as is here, we'll be pleased to take a look at it.
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Thank you for information.
But I could not show the source code when exception happens.
Our sample code is following.
This sample is drawing 4 series.
The AddXY function calls per 2ms.
The buttom axis is changed by OnAfterAdd event.
This problem rarely happens.
I think these would not be special.
Please tell me what do I do.
Best regards,
Magic
Main Header
Main C++ code.
Call back by multimedia timer
But I could not show the source code when exception happens.
Our sample code is following.
This sample is drawing 4 series.
The AddXY function calls per 2ms.
The buttom axis is changed by OnAfterAdd event.
This problem rarely happens.
I think these would not be special.
Please tell me what do I do.
Best regards,
Magic
Main Header
Code: Select all
//---------------------------------------------------------------------------
#ifndef Unit_MainH
#define Unit_MainH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "MultiMediaTimer.hpp"
#include <Vcl.ExtCtrls.hpp>
#include <VCLTee.Chart.hpp>
#include <VCLTee.Series.hpp>
#include <VCLTee.TeEngine.hpp>
#include <VCLTee.TeeProcs.hpp>
#define MAX_SERIES_COUNT 4
//---------------------------------------------------------------------------
class TForm_Main : public TForm
{
__published:
TChart *Chart_Main;
TPanel *Panel_Main;
TFastLineSeries *Series1;
TFastLineSeries *Series2;
TFastLineSeries *Series3;
TFastLineSeries *Series4;
TButton *Button_Start;
TButton *Button_Stop;
TButton *Button_Close;
void __fastcall FormShow(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Button_StartClick(TObject *Sender);
void __fastcall Button_StopClick(TObject *Sender);
void __fastcall Button_CloseClick(TObject *Sender);
private:
TMultiMediaTimer *m_ptMMTimerMain;
public:
unsigned long m_uint32Count;
double m_rl64StartTime;
double m_arl64Value[MAX_SERIES_COUNT];
void __fastcall CyclicEvent(void);
void __fastcall SeriesAfterAdd(TChartSeries *Sender, int ValueIndex);
__fastcall TForm_Main(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm_Main *Form_Main;
//---------------------------------------------------------------------------
#endif
Code: Select all
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit_Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_Main *Form_Main;
//---------------------------------------------------------------------------
__fastcall TForm_Main::TForm_Main(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::FormShow(TObject *Sender)
{
try
{
this->m_ptMMTimerMain = new TMultiMediaTimer();
}
catch(std::bad_alloc)
{
// Critical fault
Application->MessageBox(L"Memory Allocation Fault", L"Error", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::FormClose(TObject *Sender, TCloseAction &Action)
{
if( this->m_ptMMTimerMain != NULL ) delete this->m_ptMMTimerMain;
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::Button_StartClick(TObject *Sender)
{
// Start
this->m_rl64StartTime = Now().Val;
for( int i = 0; i < this->Chart_Main->SeriesCount(); i++ )
{
this->m_arl64Value[i] = (double)i * 100.0;
}
this->m_uint32Count = 0;
this->Chart_Main->BottomAxis->Automatic = false;
for(int m = 0; m < this->Chart_Main->SeriesCount(); m++ )
{
this->Chart_Main->Series[m]->OnAfterAdd = this->SeriesAfterAdd;
}
this->m_ptMMTimerMain->StartTimer(2, this->CyclicEvent); // Drawing callback per 2ms
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::Button_StopClick(TObject *Sender)
{
// Stop
this->m_ptMMTimerMain->StopTimer();
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::Button_CloseClick(TObject *Sender)
{
// Close
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::CyclicEvent(void)
{
// Cyclic event (callback)
double rl64Value;
double rl64Time = (Now().Val - this->m_rl64StartTime) * 86400.0;
this->m_uint32Count++;
if( this->m_uint32Count == 500 )
{
this->m_uint32Count = 0;
}
for( int i = 0; i < MAX_SERIES_COUNT; i++ )
{
if( this->m_uint32Count < 250 )
{
this->m_arl64Value[i] += 1.0;
}
else
{
this->m_arl64Value[i] -= 1.0;
}
this->Chart_Main->Series[i]->AddXY(rl64Time, this->m_arl64Value[i], "", this->Chart_Main->Series[i]->SeriesColor);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm_Main::SeriesAfterAdd(TChartSeries *Sender, int ValueIndex)
{
double rlVal = Sender->XValues->MaxValue;
Sender->GetHorizAxis->SetMinMax(rlVal - 10.0, rlVal);
}
//---------------------------------------------------------------------------
Code: Select all
//---------------------------------------------------------------------------
#ifndef MultiMediaTimerHpp
#define MultiMediaTimerHpp
#ifndef WIN32
#define WIN32
#endif
// C function
#include <stdlib.h>
// C++Bulder classses
#include <Classes.hpp>
// Windows header
#include <Mmsystem.h>
#define ST_MMTIMER_INIT 0
#define ST_MMTIMER_STANDBY 1
#define ST_MMTIMER_EXECUTING 2
#define ST_MMTIMER_STOP 3
#define DEFAULT_MMTIMER_INTERVAL 10
#define MMTIMER_TARGET_RESOLUTION 1 // 1-millisecond target resolution
void CALLBACK gMultiMediaTimerProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
//---------------------------------------------------------------------------
// Class Definition
//---------------------------------------------------------------------------
class TMultiMediaTimer
{
private:
int m_nStatus; // Status
UINT m_wTimerRes; // Timer Resolution
bool m_flgCallback; // Flag: Callback Executing
MMRESULT m_hMMTimer; // Handle of Multimedia Timer
void __fastcall (__closure *m_pfncMMTimerProc)(void); // Handle of function to use in callback
int __fastcall max(int value1, int value2);
int __fastcall min(int value1, int value2);
public:
TMultiMediaTimer(); // Constructor
~TMultiMediaTimer(); // Destructor
bool __fastcall StartTimer(int nInterval, void __fastcall (__closure *fnc)(void));
bool __fastcall StopTimer();
// for internal public
bool __fastcall IsTimerProcExecuting();
void __fastcall SetTimerProcExecuting();
void __fastcall ClearTimerProcExecuting();
bool __fastcall IsTimerFuncAvailable();
void __fastcall ExecuteTimerProc();
};
// Function Definition
//---------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Constructor
*////////////////////////////////////////////////////////////////////////////////////////
TMultiMediaTimer::TMultiMediaTimer()
{
this->m_nStatus = ST_MMTIMER_INIT;
this->m_wTimerRes = MMTIMER_TARGET_RESOLUTION;
this->m_flgCallback = false;
this->m_hMMTimer = NULL;
this->m_pfncMMTimerProc = NULL;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Destructor
*////////////////////////////////////////////////////////////////////////////////////////
TMultiMediaTimer::~TMultiMediaTimer()
{
this->StopTimer();
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\param [in] nValue1 Value 1.
\param [in] nValue2 Value 2.
\return max value.
\brief Compare value 1 and value 2
*////////////////////////////////////////////////////////////////////////////////////////
int __fastcall TMultiMediaTimer::max(int nValue1, int nValue2)
{
return ( (nValue1 > nValue2) ? nValue1 : nValue2 );
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\param [in] nValue1 Value 1.
\param [in] nValue2 Value 2.
\return min value.
\brief Compare value 1 and value 2
*////////////////////////////////////////////////////////////////////////////////////////
int __fastcall TMultiMediaTimer::min(int nValue1, int nValue2)
{
return ( (nValue1 > nValue2) ? nValue2 : nValue1 );
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\param [in] nInterval Timer interval value.
\param [in] fnc Handle of cyclic function.
\brief Start Multi Media Tiemr
*////////////////////////////////////////////////////////////////////////////////////////
bool __fastcall TMultiMediaTimer::StartTimer(int nInterval, void __fastcall (__closure *fnc)(void))
{
TIMECAPS tTimeCaps; // Timer resolution
if( this->m_nStatus == ST_MMTIMER_INIT )
{
if( timeGetDevCaps(&tTimeCaps, sizeof(TIMECAPS)) != TIMERR_NOERROR )
{
return false;
}
this->m_wTimerRes = min(max(tTimeCaps.wPeriodMin, MMTIMER_TARGET_RESOLUTION), tTimeCaps.wPeriodMax);
timeBeginPeriod(this->m_wTimerRes);
this->m_nStatus = ST_MMTIMER_STANDBY;
}
if( this->m_nStatus == ST_MMTIMER_STANDBY )
{
this->m_pfncMMTimerProc = fnc;
this->m_hMMTimer = timeSetEvent(nInterval,
this->m_wTimerRes,
gMultiMediaTimerProc,
(DWORD)this,
TIME_PERIODIC);
if( this->m_hMMTimer == NULL )
{
this->m_pfncMMTimerProc = NULL;
this->StopTimer();
return false;
}
this->m_nStatus = ST_MMTIMER_EXECUTING;
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Stop Multi Media Tiemr
*////////////////////////////////////////////////////////////////////////////////////////
bool __fastcall TMultiMediaTimer::StopTimer()
{
if( this->m_nStatus > ST_MMTIMER_STANDBY )
{
if( this->m_hMMTimer != NULL )
{
timeKillEvent(this->m_hMMTimer);
this->m_hMMTimer = NULL;
this->m_pfncMMTimerProc = NULL;
this->m_flgCallback = false;
this->m_nStatus = ST_MMTIMER_STANDBY;
}
}
if( this->m_nStatus == ST_MMTIMER_STANDBY )
{
timeEndPeriod(this->m_wTimerRes);
this->m_wTimerRes = MMTIMER_TARGET_RESOLUTION;
}
this->m_nStatus = ST_MMTIMER_INIT;
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Check Timer Procedure Executing
*////////////////////////////////////////////////////////////////////////////////////////
bool __fastcall TMultiMediaTimer::IsTimerProcExecuting()
{
return this->m_flgCallback;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Set Timer Procedure Executing
*////////////////////////////////////////////////////////////////////////////////////////
void __fastcall TMultiMediaTimer::SetTimerProcExecuting()
{
this->m_flgCallback = true;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Clear Timer Procedure Executing
*////////////////////////////////////////////////////////////////////////////////////////
void __fastcall TMultiMediaTimer::ClearTimerProcExecuting()
{
this->m_flgCallback = false;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Check Timer Procedure Available
*////////////////////////////////////////////////////////////////////////////////////////
bool __fastcall TMultiMediaTimer::IsTimerFuncAvailable()
{
bool bRslt = (this->m_pfncMMTimerProc == NULL) ? false : true;
return bRslt;
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Check Timer Procedure Available
*////////////////////////////////////////////////////////////////////////////////////////
void __fastcall TMultiMediaTimer::ExecuteTimerProc()
{
this->m_pfncMMTimerProc();
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief Callback function for Multi Media Tiemr
*////////////////////////////////////////////////////////////////////////////////////////
void CALLBACK gMultiMediaTimerProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
TMultiMediaTimer *ptMMTimer = (TMultiMediaTimer *)dwUser;
if( ptMMTimer->IsTimerProcExecuting() )
{
return;
}
ptMMTimer->SetTimerProcExecuting();
try
{
if( ptMMTimer->IsTimerFuncAvailable() )
{
ptMMTimer->ExecuteTimerProc();
}
}
__finally
{
ptMMTimer->ClearTimerProcExecuting();
}
}
#endif // MultiMediaTimerHpp
Re: Access violation in tee9170.bpl
Hello,
I've created a new simple example project to test it. Your multimedia timer gives me some errors so I've used a regular TTimer:
I've only added a TTimer and a TChart with 4 TFastLineSeries at design time, and the following code works fine for me here:
Code added at the .h:
Code added at the .cpp:
Could you please arrange a simple example project we can run as-is to reproduce the problem here?
Thanks in advance.
I've created a new simple example project to test it. Your multimedia timer gives me some errors so I've used a regular TTimer:
I've only added a TTimer and a TChart with 4 TFastLineSeries at design time, and the following code works fine for me here:
Code added at the .h:
Code: Select all
public: // User declarations
int m_uint32Count;
double m_arl64Value[MAX_SERIES_COUNT];
Code: Select all
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
double rl64Value;
double rl64Time = (Now().Val) * 86400.0;
this->m_uint32Count++;
if( this->m_uint32Count == 500 )
{
this->m_uint32Count = 0;
}
for( int i = 0; i < MAX_SERIES_COUNT; i++ )
{
if( this->m_uint32Count < 250 )
{
this->m_arl64Value[i] += 1.0;
}
else
{
this->m_arl64Value[i] -= 1.0;
}
this->Chart1->Series[i]->AddXY(rl64Time, this->m_arl64Value[i], "", this->Chart1->Series[i]->SeriesColor);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
m_uint32Count=0;
}
Thanks in advance.
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Hello,
Thank you for response.
I attached simple project for C++Builder XE3.
Please check it.
Magic
Thank you for response.
I attached simple project for C++Builder XE3.
Please check it.
Magic
- Attachments
-
- TChartTest1.zip
- Simple test project for C++Builder XE3
- (110.73 KiB) Downloaded 609 times
Re: Access violation in tee9170.bpl
Hi,
I've run your application for a while and found no error. Do I have to do anything special to reproduce the error?
If not, it has to be some difference between our environments. If you are using TeeChart v2012.07, please check the paths are correct:
- At "Tools\Options...\Environment Options\C++ Options\Paths and Directories\Selected Platform 32-bit Windows\System Include path", check the following path is on the top of the list and there's no reference to any older TeeChart installation:
C:\Program Files (x86)\Steema Software\TeeChart 2012 for RAD XE3\Delphi17.win32\Include
- At "Tools\Options...\Environment Options\C++ Options\Paths and Directories\Selected Platform 32-bit Windows\Library path", check the following path is on the top of the list and there's no reference to any older TeeChart installation:
C:\Program Files (x86)\Steema Software\TeeChart 2012 for RAD XE3\Delphi17.win32\Lib
C:\Program Files (x86)\Steema Software\TeeChart 2012 for RAD XE3\Delphi17.win32\Lib\Obj
I've run your application for a while and found no error. Do I have to do anything special to reproduce the error?
If not, it has to be some difference between our environments. If you are using TeeChart v2012.07, please check the paths are correct:
- At "Tools\Options...\Environment Options\C++ Options\Paths and Directories\Selected Platform 32-bit Windows\System Include path", check the following path is on the top of the list and there's no reference to any older TeeChart installation:
C:\Program Files (x86)\Steema Software\TeeChart 2012 for RAD XE3\Delphi17.win32\Include
- At "Tools\Options...\Environment Options\C++ Options\Paths and Directories\Selected Platform 32-bit Windows\Library path", check the following path is on the top of the list and there's no reference to any older TeeChart installation:
C:\Program Files (x86)\Steema Software\TeeChart 2012 for RAD XE3\Delphi17.win32\Lib
C:\Program Files (x86)\Steema Software\TeeChart 2012 for RAD XE3\Delphi17.win32\Lib\Obj
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Hello Yeray,
Thank you for testing.
Nothing special requirements.
This problem rarely happens.
In our environment, this problem happens after the software started and 2 or 3 minutes elapsed.
Best regards,
Magic
Thank you for testing.
Nothing special requirements.
This problem rarely happens.
In our environment, this problem happens after the software started and 2 or 3 minutes elapsed.
Best regards,
Magic
Re: Access violation in tee9170.bpl
Hi,
I've ran the application a few times more, for longer, and got an access violation twice.
However I haven't been able to go to the debugger.
We should find a more consistent way to reproduce the problem, and preferably in delphi.
I've ran the application a few times more, for longer, and got an access violation twice.
However I haven't been able to go to the debugger.
We should find a more consistent way to reproduce the problem, and preferably in delphi.
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Hello Yeray,
I think If you use the XE3, you should change the native OS exception parameter of debugger option.
- At "Tools\Options...\Debugger Options\Embarcadero Debuggers\Native OS Exceptions"
Select "32-bit Windows OS Exceptions - Access Violation( $C0000005)", and change the "handled by" to debugger.
Also I set the "Debug Source path" option.
- At "Tools\Options\Debugger Options\Embarcadero Debuggers".
If you know about other requirement parameters, could you teach me?
Best regards,
Magic
I think If you use the XE3, you should change the native OS exception parameter of debugger option.
- At "Tools\Options...\Debugger Options\Embarcadero Debuggers\Native OS Exceptions"
Select "32-bit Windows OS Exceptions - Access Violation( $C0000005)", and change the "handled by" to debugger.
Also I set the "Debug Source path" option.
- At "Tools\Options\Debugger Options\Embarcadero Debuggers".
If you know about other requirement parameters, could you teach me?
Best regards,
Magic
Re: Access violation in tee9170.bpl
Hi Magic,
Excuse us for the delayed reply here.
Since it's quite randomly reproducible, but you own the TeeChart sources, you could try to debug them to see where the exception occurs.
Here there are some instructions on how to debug delphi sources from a BCB project:
http://www.teechart.net/support/viewtop ... 005#p47005
Alternatively, you could try to move the testing application to delphi so it can be debugged more easily, assuming the moved application still reproduces the problem, rarely or consistently.
Excuse us for the delayed reply here.
Since it's quite randomly reproducible, but you own the TeeChart sources, you could try to debug them to see where the exception occurs.
Here there are some instructions on how to debug delphi sources from a BCB project:
http://www.teechart.net/support/viewtop ... 005#p47005
Alternatively, you could try to move the testing application to delphi so it can be debugged more easily, assuming the moved application still reproduces the problem, rarely or consistently.
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Hello Yeray,
I made the sample application by Delphi for testing of access violation.
Same problem happened, but I couldn't find the source file of "VCLTee.TeEngine.pas" in TeeChar2013SourceCode.
Where can I find it?
Best regards,
Magic
I made the sample application by Delphi for testing of access violation.
Same problem happened, but I couldn't find the source file of "VCLTee.TeEngine.pas" in TeeChar2013SourceCode.
Where can I find it?
Best regards,
Magic
- Attachments
-
- TChartTest2.zip
- Test Application for Delphi
- (84.37 KiB) Downloaded 622 times
Re: Access violation in tee9170.bpl
Hi,
You should find TeEngine.pas at the "Sources" path in the TeeChart SourceCode installation.
After running TeeRecompile, the VCLTee.TeEngine.pas is generated at the "Sources\VCL" path.
To directly use the sources in the IDE, run TeeRecompile to generate the sources with prefixes in the "Sources\VCL" path, and put this path at the IDE Library path making sure it is on the top of the list and there are no other references to other installations, even "Sources\compiled\...".
Regarding the error message, note TeeChart isn't thread safe. This means you have to be careful when manipulating a chart from different threads. For example, you should control manually (with semaphores or something) if you want the chart to be drawn in one thread and to add points to the same chart from another thread, to avoid interferences. In your example, you could disable AutoRepaint before adding points at TForm_Main.CycleEvent, and enable it again after it:
However, this will stop the chart of being repainted, so you could force the repaints manually. Ie, before ending the CycleEvent, you can add this to repaint the chart each 10 events:
You should find TeEngine.pas at the "Sources" path in the TeeChart SourceCode installation.
After running TeeRecompile, the VCLTee.TeEngine.pas is generated at the "Sources\VCL" path.
To directly use the sources in the IDE, run TeeRecompile to generate the sources with prefixes in the "Sources\VCL" path, and put this path at the IDE Library path making sure it is on the top of the list and there are no other references to other installations, even "Sources\compiled\...".
Regarding the error message, note TeeChart isn't thread safe. This means you have to be careful when manipulating a chart from different threads. For example, you should control manually (with semaphores or something) if you want the chart to be drawn in one thread and to add points to the same chart from another thread, to avoid interferences. In your example, you could disable AutoRepaint before adding points at TForm_Main.CycleEvent, and enable it again after it:
Code: Select all
Chart_Main.AutoRepaint:=false;
Chart_Main.Series[I].AddXY(rl64Time, m_arl64Value[I], '', Chart_Main.Series[I].SeriesColor);
Chart_Main.AutoRepaint:=true;
Code: Select all
if (m_uint32Count mod 10 = 0) then
begin
Chart_Main.Refresh;
end;
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Hello Yeray,
Thank you for your advice.
I will change and test my program as your advice.
Currently, I have another problem.
I could not recompile by following error.
VCLTee.TeeSpanish.pas(527) E2052
VCLTee.TeeSpanish.pas(528) E2066
Could you tell me about way to fix this issue?
Best regards,
Magic
Thank you for your advice.
I will change and test my program as your advice.
Currently, I have another problem.
I could not recompile by following error.
VCLTee.TeeSpanish.pas(527) E2052
VCLTee.TeeSpanish.pas(528) E2066
Could you tell me about way to fix this issue?
Best regards,
Magic
Re: Access violation in tee9170.bpl
Hi,
Is that the complete error message? When are you getting it?Magic wrote:Currently, I have another problem.
I could not recompile by following error.
VCLTee.TeeSpanish.pas(527) E2052
VCLTee.TeeSpanish.pas(528) E2066
Could you tell me about way to fix this issue?
Best Regards,
Yeray Alonso Development & Support Steema Software Av. Montilivi 33, 17003 Girona, Catalonia (SP) | |
Please read our Bug Fixing Policy |
Re: Access violation in tee9170.bpl
Hello Yeray,
It happens when run the TeeRecompile program.
Best regards,
Magic
It happens when run the TeeRecompile program.
Best regards,
Magic