Re: Create a wrapper around larger c-libraries
On Sunday, 24 April 2022 at 15:13:15 UTC, Alain De Vos wrote: I'm currenlty experimenting about binding to C. I have : C-library: mylib.h: ``` void libprintme(char *s); ``` mylib.c: ``` #include #include "mylib.h" void libprintme(char *s){printf("%s",s);} ``` [...] Can this procedure be used for larger C-libraries ? What is good , what is bad , what can be better. Feel free to elaborate ? (It's the C-preprocessor with macro expansion which gives me sometimes a bit of a headache.) Why not just ```d extern(C) @nogc nothrow { void libprintme(char *s); alias cprintme = libprintme; } ``` ? The function pointer looks totally superfluous to me.
Re: Create a wrapper around larger c-libraries
``` void main(){dprintme("Hello\n");} } ```
Create a wrapper around larger c-libraries
I'm currenlty experimenting about binding to C. I have : C-library: mylib.h: ``` void libprintme(char *s); ``` mylib.c: ``` #include #include "mylib.h" void libprintme(char *s){printf("%s",s);} ``` main.d: ``` extern(C) @nogc nothrow { void libprintme(char *s); alias pprintme=void function(char *s); __gshared pprintme cprintme= } extern(D) { void dprintme(string ds){ alias dstring=string; alias cstring=char *; import std.conv: to,castFrom; cstring cs=castFrom!dstring.to!cstring(ds); (*cprintme)(cs); import core.stdc.stdio: printf; printf("World"); } ``` Can this procedure be used for larger C-libraries ? What is good , what is bad , what can be better. Feel free to elaborate ? (It's the C-preprocessor with macro expansion which gives me sometimes a bit of a headache.)