On Monday, 22 May 2017 at 01:39:04 UTC, evilrat wrote:
On Monday, 22 May 2017 at 01:27:22 UTC, Nicholas Wilson wrote:

Probably because the D side is expecting to have the struct returned in a pointer allocated by the callee and then the C++ puts it in regs and BOOM.

If you wrap the C++ side to return the struct by a pointer then use that in D, then it should work.

And this is actually D problem. In fact first bug report on this thing was dated back to 2014. Still not fixed.

Thanks for your reply, do you have any links to some bug report of that issue?

There is possible hacky workaround to try - put struct as pointer arg instead of return and make helper method to use it, like this

-------- HACK -------------------
// extern(C++) of course
void GetCursorPos(ImVec2* v);

// helper
ImVec2 GetCursorPos()
{
 ImVec2 temp;
 GetCursorPos(&temp);
 return temp;
}
----------------------------------

Actually, your example would work just fine, my problem and possible solution is the other way around :-). First I'll try to force a copy with a wrapper func and same sig.

Reply via email to