On Tuesday, 30 July 2013 at 20:53:55 UTC, Dicebot wrote:
On Tuesday, 30 July 2013 at 20:22:46 UTC, Milvakili wrote:
Thanks. Is there any work in progress related to string passing?
I think string passing should be solved automatically.

Coz otherwise one need to write wrapper for each c++ function that has a string parameter.

thanks.

c_function(toStringz("hello").ptr) does not seem that bad, what is the issue here?

I want to point out that one of the dangers (as I've heard it, I haven't actually run into this), is that since the garbage collector won't scan your C function's internals, the caller *must* keep a reference in his code to preserve the allocated array. The above scheme does not do that: If the garbage collector runs after the start of the call, but before the end of the function, then you are in trouble.

I'd do it like this:
//----
string lifeline = toStringz("hello"); //Preserve reference
c_function(lifeline.ptr); //Make call
lifeline = null; //Release reference
//----

That's assuming c_function won't preserve the string somewhere. If it does, things get more complicated.

Reply via email to