Re: Create a wrapper around larger c-libraries

2022-04-24 Thread user1234 via Digitalmars-d-learn

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

2022-04-24 Thread Alain De Vos via Digitalmars-d-learn

```
void main(){dprintme("Hello\n");}
}
```


Create a wrapper around larger c-libraries

2022-04-24 Thread Alain De Vos via Digitalmars-d-learn

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.)