Page 1 of 3
TeeChart2014 OCX - Backwards compatibility
Posted: Mon Jun 30, 2014 9:49 am
by 16668589
There is a product which uses TeeChart2012.ocx. I have upgraded it to TeeChart2014.ocx and I have changed the .h and .cpp files for the new release.
What about the old releases which are using TeeChart2012.ocx? When using TeeChart2014.ocx I'm getting a message error "Member not found."
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Tue Jul 01, 2014 9:53 am
by yeray
Hello,
Do you know what property that was working with the 2012' ocx is giving this error with the actual version?
Could you please arrange a simple example project we can run as-is to reproduce the problem here?
Thanks in advance.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Tue Jul 01, 2014 3:47 pm
by 16668589
The problems occured in this methods:
tChart.GetWalls().GetBack().GetPen(); - at GetPen() we get the message
chartSeries.GetAsLine().GetLinePen(); - at GetLinePen() we get the message
chartSeries.GetAsLine().SetStairs(TRUE); - at SetStairs() we get the message
chartSeries.GetAsLine().SetInvertedStairs(TRUE); - at SetInvertedStairs() we get the message
I will try to make a simple project.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Wed Jul 02, 2014 10:22 am
by yeray
Hello,
Micro wrote:The problems occured in this methods:
tChart.GetWalls().GetBack().GetPen(); - at GetPen() we get the message
chartSeries.GetAsLine().GetLinePen(); - at GetLinePen() we get the message
chartSeries.GetAsLine().SetStairs(TRUE); - at SetStairs() we get the message
chartSeries.GetAsLine().SetInvertedStairs(TRUE); - at SetInvertedStairs() we get the message
I've tested all these properties in a simple VB6 application and both TeeChart v2014.0.0.0 and v2014.0.0.1 and found no problem with it.
Code: Select all
TChart1.Aspect.View3D = False
TChart1.Legend.Visible = False
TChart1.Walls.Back.Pen.Color = vbRed
TChart1.AddSeries scLine
TChart1.Series(0).FillSampleValues 5
TChart1.Series(0).asLine.Pointer.Visible = True
TChart1.Series(0).asLine.Stairs = True
TChart1.Series(0).asLine.InvertedStairs = True
Are you using v2014.0.0.0 or v2014.0.0.1?
Micro wrote:I will try to make a simple project.
Yes, that would be helpful.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Fri Jul 04, 2014 9:12 am
by 16668589
I attached a demo project. Just click ok button and 4 jpg graphs should be generated. With 2012 is working but with 2014 I got the "Member not found" message box.
I'm using the 2014.0.0.0 version.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Fri Jul 04, 2014 9:21 am
by 16668589
Extract zip files in the same directory.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Fri Jul 04, 2014 1:43 pm
by yeray
Hello,
These are the calls that are crashing to me with your project and TeeChart ActiveX v2014.0.0.1:
Code: Select all
rTChart.GetWalls().GetBack().GetPen().SetVisible(FALSE);
ChartSeries.GetAsLine().GetLinePen().SetStyle(0);
ChartSeries.GetAsLine().GetLinePen().SetWidth(2);
ChartSeries.GetAsLine().SetStairs(TRUE);
ChartSeries.GetAsLine().SetInvertedStairs(TRUE);
We're investigating what's the cause of the problem and we'll be back to you asap.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Mon Jul 07, 2014 2:08 pm
by yeray
Hello,
Yeray wrote:These are the calls that are crashing to me with your project and TeeChart ActiveX v2014.0.0.1:
Code: Select all
rTChart.GetWalls().GetBack().GetPen().SetVisible(FALSE);
ChartSeries.GetAsLine().GetLinePen().SetStyle(0);
ChartSeries.GetAsLine().GetLinePen().SetWidth(2);
ChartSeries.GetAsLine().SetStairs(TRUE);
ChartSeries.GetAsLine().SetInvertedStairs(TRUE);
We're investigating what's the cause of the problem and we'll be back to you asap.
I have problems moving your application to use TeeChart v2014.0.0.1. Have you tried it?
However, I can use the lines of code above in a simple VC++ application in Visual Studio 2010 with both TeeChart v2014.0.0.0 and TeeChart v2014.0.0.1.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Fri Jul 11, 2014 2:00 pm
by 16668589
You are using also the files from TChart_2012 folder?
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Fri Jul 11, 2014 3:56 pm
by yeray
Hello,
Micro wrote:You are using also the files from TChart_2012 folder?
Your application builds fine and if I register TeeChart v2014.0.0.1 the about box shows the correct number:
And I still reproduce the error with VS2012. Then, I try to make sure the headers are fine, overriding the one in TChart_2012 with the ones provided with the v2014.0.0.1 installer and then the application doesn't build any more.
That's why I tried it in a new simple VC++ application and VS2010. Could you please try with a new simple example project using TeeChart v2014.0.0.1 from scratch?
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Mon Jul 14, 2014 3:06 pm
by 16668589
Hi,
I will start from the beginning.
There is a product which uses TeeChart 2012 using the .h and .cpp files provided in the installation folder and copied them in the TChart_2012 folder. This product is delivered to the customer.
For the new release of our product we want to update to TeeChart 2014. I fixed the code. I replaced all the files from TChart_2012 with the files provided in the installation folder of TeeChart 2014 and its working fine.
And here comes the problem. When I have both versions installed on the same computer the new release is working using TeeChart 2014. But the old product is not working with the new TeeChart 2014. The old product generates the "Member not found!" error. Because the old product is already delivered to the customer I cannot make any changes in the code.
One place where we get this error is in:
rTChart.GetWalls().GetBack().GetPen();
In wall.cpp we have the followings:
• TeeChart 2012
CPen1 CWall::GetPen()
{
LPDISPATCH pDispatch;
InvokeHelper(0x3, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&pDispatch, NULL);
return CPen1(pDispatch);
}
• TeeChart 2014
CPen1 CWall::GetPen()
{
LPDISPATCH pDispatch;
InvokeHelper(0xcc, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&pDispatch, NULL);
return CPen1(pDispatch);
}
As we can see there is a difference in InvokeHelper method, “0x3” vs “0xcc”. May be this is the error generator.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Tue Jul 15, 2014 12:07 pm
by yeray
Hi,
Micro wrote:And here comes the problem. When I have both versions installed on the same computer the new release is working using TeeChart 2014. But the old product is not working with the new TeeChart 2014. The old product generates the "Member not found!" error. Because the old product is already delivered to the customer I cannot make any changes in the code.
I'm not sure to understand if the v2014 ocx has been registered in the customer machine or not. However, I understand some way or another you can't synchronize this new ocx with the corresponding headers in the customer machine.
The headers are extracted from the ocx and included in the installer so you can rebuild your applications with the headers and ocx matching. I don't think it's possible to upgrade the TeeChart version without recompiling the application referencing the headers for that concrete version of the ocx.
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Wed Jul 16, 2014 2:43 pm
by 16668589
Last time when we did an upgrade from version 5 to 2012 we didn't had any problems with the old releases of our product to use the new TeeChart2012 ActiveX control, which previously were using TeeChart5.
If we are looking at tchart.cpp and compare the 2 versions, we can see that all the methods have the same dwDispID parameter in the InvokeHelper method call. But for the wall.cpp these values are change for almost all methods. I still think that this generates the problem. If those values would be the same in 2014 as in 2012 TeeChart ActiveX control, it would work.
We cannot rebuild old versions of our products and deliver them to our customers. That's not an option for us.
Or, maybe, if the new TeeChart2014 is registered with an other CLSID, that will also work for us.
Thanks
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Fri Jul 18, 2014 12:08 pm
by Pep
Hello,
the problem is that several changes have been made into the TeeChart interfaces on this major release (for example, as you said, at the walls part). It's not possible for us to prepare a 2014 without these changes. The only way I can think of would be to rebuild the app with the latest TeeChart ocx version or use an old ocx for this specific application (in the case you don't want to rebuild it).
Re: TeeChart2014 OCX - Backwards compatibility
Posted: Mon Jul 21, 2014 11:56 am
by 16668589
It is ok to use the old ocx for the old product. But for the new product we need the new ocx (2014) registerred on the same machine. Since the old and the new ocx version share the same CLSID it is not possible to have both OCX versions registerred on the same machine.
An ActiveX control must be backward compatible by design. If this is not guaranteed you must register it as a different/new component with new CLSID.
Apparently the 2014 OCX is not backward compatible to earlier versions, so either you use a different CLSID or make the 2014 OCX backward compatible.
If you are not considering one of the two options, you force use to stay on version 2012, which is a reason for us not to pay any maintenance fee any longer.