How To Call D Code from Objective C?

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Fri Dec 11 01:55:25 PST 2015


On 2015-12-11 09:51, Mike McKee wrote:
> So I'm having trouble figuring out the D and C code.
>
> Created dfunc.d with this:
>
> extern (C) string dfunc(string s) {
>          return s ~ "response";
> }
>
> Then compiled:
>
> $ dmd -c dfunc.d
>
> This created dfunc.o without error.
>
> Next, I created C code like so:
>
> extern char * dfunc(char *);
> char * c_dfunc(char *s) {
>    return dfunc(s);
> }

"string" in D is not the same as "char*" in C. "string" is an alias to 
an array of immutable characters. An array in D consists of the length 
of the array and a pointer to the data.

The interface of the function needs to only contain C types. Something 
like this:

extern (C) char* dfunc(char* s);

If you want to use the D string operations, like ~, you need to convert 
it to a D string, do the concatenation, and then convert it back to a C 
string [2] [3].

See [3] for more information.

[1] http://dlang.org/phobos/std_string.html#.toStringz
[2] http://dlang.org/phobos/std_string.html#.fromStringz
[3] http://dlang.org/spec/interfaceToC.html

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list