Reuse C memory for D struct?
Baz
bburg.basile at yahoo.fr
Fri Nov 22 17:38:59 PST 2013
On Thursday, 21 November 2013 at 15:22:10 UTC, Lemonfiend wrote:
> Hi!
>
> I'm wondering if it's possible to have a struct in D which uses
> the same pointer and memory as returned by the extern C
> function.
> This would allow me to manipulate and use the C struct directly
> in D code.
>
> I'm not sure how to better explain this, hopefully the
> following pseudocode clarifies my question
>
> struct Tree
> {
> enum treeSize = 40;
>
> ubyte[treeSize] _this;
>
> this(int apples)
> {
> // use the C provided pointer somehow?
> // neither of the following seem to do the trick
> //this = *cppNew(apples);
> //_this = *cast(ubyte*)cppNew(apples)
> }
>
> Tree* cppNew(int apples)
> {
> // calls extern C constructor which returns a pointer to a
> Tree of size treeSize
> }
>
> ~this()
> {
> cppDelete();
> }
>
> void cppDelete()
> {
> // this needs the pointer returned by cppNew to do an extern
> C delete
> }
> }
>
> void main()
> {
> Tree tree = Tree(12);
> }
if your D struct is POD and alocated on the heap, it's the same,
as long as data type are the same and not plateform-dependent.I'm
mean that that you just cast from the initial pointer...
More information about the Digitalmars-d-learn
mailing list