Introducing C bindings
Writing C bindings involves using some specific Crystal keywords and concepts in order to define the API of the C library, such as what functions it has, what the arguments are, and what the return type is. Crystal is then able to use these definitions to handle how to use them. The end result is the ability to call C library functions from Crystal without needing to write any C yourself. Before we dive directly into binding libnotify, let's start off with some more basic examples to introduce the concepts and such. Take this simple C file for example:
#include <stdio.h> void sayHello(const char *name) { printf("Hello %s!\n", name); }
We define a single function that accepts a char pointer representing the name of a person to whom to say hello. We can then define our bindings:
@[Link(ldflags: "#{__DIR__}/hello.o")] lib LibHello fun say_hello = sayHello(name : LibC::Char*) : Void end LibHello...