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