Page 2 of 2
Re: C++ OOP library and Interface
Posted: Sun Oct 02, 2016 1:48 pm
by Shield
If you declare your destructor as virtual, it will still get added to the virtual table (hence the name of the keyword).
The warning message you got has to do with inheritance. You only need a virtual destructor in this case:
Code: Select all
// Given class Bar : public Foo
Bar* bar = new Bar();
Foo* foo = bar;
delete foo; // If you do this, the destructor of Bar will not be called.
Since PB doesn't do OOP, this isn't really a problem. You'd have to do something like this to cause the issue:
Code: Select all
*bar = NewBar()
DeleteFoo(*bar) // If you do this in PB, you've got bigger issues anyway.
Not sure if all that information matters to you, but I just wanted to point out some possible caveats.

Re: C++ OOP library and Interface
Posted: Sun Oct 02, 2016 3:01 pm
by StarBootics
I understand your point, but my point is this ;
The library I going to use is OpenCASCADE and the problem is I can't remove the Virtual Destructor from any class because C++ programmer using the same library might need them. Much worse according to the library license, if the code is being modified it should be returned. I don't think they will be very please about destructor disappearance from the code just to please me and PureBasic.
But asking to add two plain C function per class like these :
Code: Select all
extern "C"
{
Time* CreateTimeInterface()
{
return new Time;
}
int DeleteTimeInterface(const Time * ToBeDeleted)
{
delete ToBeDeleted;
return 0;
}
}
will not matter C++ programmer at all because they will not use them anyway.
And I'm well aware about the fact that PureBasic doesn't do OOP and the virtual Destructor() is not used at all from PB. The main question is :
We are wasting memory for a not needed function into the interface, but it is so BAD ?
I have a working code, I'm happy !
Best regards
StarBootics
Re: C++ OOP library and Interface
Posted: Sun Oct 02, 2016 4:09 pm
by Shield
Not sure what (parts) exactly you are using, but apparently OpenCascade is published
under LGPL which just requires you to publish any modifications you do under the same license,
so no problem there (publish here means that you have to make the code available on your server or wherever you want).
The problem isn't so much the memory usage but rather possible problems with interface itself (i.e. memory layout etc.).
What I don't quite get, though, is why you are trying to map an interface (i.e. "OOP") just to put the code into a procedural
module again, effectively calling a singleton instance via global variable.
If this is what you want to do with the classes provided by OpenCascade, why don't you just implement these wrapper-functions
in C++ and expose them directly, just like you exposed your NewTime() function? That way it will just work, regardless of
what compiler or platform you're using.
I have a working code, I'm happy !
Well great then, so put it to good use!

Re: C++ OOP library and Interface
Posted: Sun Oct 02, 2016 4:56 pm
by StarBootics
Shield wrote:The problem isn't so much the memory usage but rather possible problems with interface itself (i.e. memory layout etc.).
What I don't quite get, though, is why you are trying to map an interface (i.e. "OOP") just to put the code into a procedural
module again, effectively calling a singleton instance via global variable.
Because it's possible to drive a C++ class into PureBasic directly. And yes in this example it's a singleton instance via global variable but what is preventing me to use an Array, a Linked list or even a Map to store them and retrieving them by index or by a given name ? Nothing ...
Shield wrote:If this is what you want to do with the classes provided by OpenCascade, why don't you just implement these wrapper-functions
in C++ and expose them directly, just like you exposed your NewTime() function? That way it will just work, regardless of
what compiler or platform you're using.
Because this represent a lot of work in comparison of just adding two function per class and making sure that all methods are virtual. And the development is for Linux only and by the time I will have something working will take some years.
Take a look at FreeCAD if you want to see an example about what can be done.
Best regards
StarBootics
Re: C++ OOP library and Interface
Posted: Tue Oct 04, 2016 5:51 pm
by StarBootics
Hello everyone,
I'm continuing my tests before going to a more bigger challenge. I have added a "Date" class with a private function to my example just to see if work and it does.
The files are here :
https://www.dropbox.com/s/loxgf4x5z8u2f ... 3.zip?dl=0
Best regards
StarBootics
Re: C++ OOP library and Interface
Posted: Wed Oct 26, 2016 9:11 pm
by StarBootics
Hello everyone,
This is a newer version of this my example with C++ Classes and PureBasic. In this version I'm playing with structure to retrieve the version and using a structure to pass information to C++ class member.
https://www.dropbox.com/s/qkvy3lhqscfxd ... 4.zip?dl=0
Best regards
StarBootics
Re: C++ OOP library and Interface
Posted: Sat Oct 29, 2016 8:46 pm
by Kwai chang caine
Apparently, that works here W7 v5.40 X86
V1.2.3
V1.2.3
197121
V1.2.3
Thanks for sharing

Re: C++ OOP library and Interface
Posted: Sat Oct 29, 2016 11:05 pm
by StarBootics
Kwai chang caine wrote:Apparently, that works here W7 v5.40 X86
V1.2.3
V1.2.3
197121
V1.2.3
Thanks for sharing

Which example did you try ?
The debugger output for "C++ Class Interface Example 00.pb" should look like :
LibTime V1.2.3
Time V1.0.1
Date V1.0.0
21:06:30 04-10-2016
23:52:45 04-10-2016
00:00:00 00-00-0000
23:23:23 15-10-2016
23
23
23
15
10
2016
The Time & Date Objects are invalid !
and for "C++ Class Interface Example 01.pb" it should look like :
15:09:55 25-10-2015
17:59:08 29-10-2016
Time Version : V1.0.1
Date Version : V1.0.0
LibTime Version : V1.2.3
MyTime no longer exist
MyDate no longer exist
Best regards
StarBootics
Re: C++ OOP library and Interface
Posted: Sun Oct 30, 2016 9:15 pm
by Kwai chang caine
Excuse me
I'm under windows and only one code is for windows, I have test "Version Module"

Re: C++ OOP library and Interface
Posted: Sun Oct 30, 2016 10:18 pm
by StarBootics
Kwai chang caine wrote:Excuse me
I'm under windows and only one code is for windows, I have test "Version Module"

This module is cross platform (Windows-Linux-MacOS) 32/64 bits. But this is not the main topic here.
Best regards
StarBootics