Example of using C API from D?
rikki cattermole
rikki at cattermole.co.nz
Sun Sep 2 23:41:53 UTC 2018
On 03/09/2018 5:07 AM, Russel Winder wrote:
> On Mon, 2018-09-03 at 01:00 +1200, rikki cattermole via Digitalmars-d-
> learn wrote:
>>
> […]
>> You don't need to create a complete binding for something to use a
>> subset of it.
>
> True, but all too often you find there are so many interdependencies of
> names, you end up binding most of the API. I tried fiddling with
> Fontconfig using Python which has no binding and was able to hack up
> just enough using CFFI to get things working. So I think in this case a
> subset for the application is feasible – as opposed to creating a
> complete binding.
You won't need to actually fill out any c struct's that you don't need
either. Make them opaque as long as they are referenced via pointer and
not by value.
>> Writing up a Derelict style binding is easy enough since e.g.
>> SharedLib
>> struct handles most of the work (from util package).
>>
>>
> https://github.com/DerelictOrg/DerelictUtil/blob/master/source/derelict/util/sharedlib.d#L118
>
> I am not convinced this is a good approach since you do not get the
> signatures at compile time. The advantage of a binding, or subset of a
> binding is that you get full compiler support.
Ugh, you do know that the linker which does all the hard work doesn't
know anything about the signature of the C function? That is the part
SharedLib replaces. You will of course define it with a proper signature
on D's side with a helpful cast :)
i.e.
https://github.com/DerelictOrg/DerelictGL3/blob/master/source/derelict/opengl/versions/gl1x.d
More information about the Digitalmars-d-learn
mailing list