On Wednesday, 3 August 2016 at 15:24:56 UTC, llaine wrote:
On Wednesday, 3 August 2016 at 15:14:24 UTC, Kagamin wrote:
On Wednesday, 3 August 2016 at 15:08:51 UTC, llaine wrote:
So basically I have to create wrapper.c ?
Yes, but you should write it in D. Runtime initialization is
at https://dlang.org/phobos/core_runtime.html#.Runtime
Okay I tried to do something like this
import std.stdio;
import core.runtime;
extern(C)
{
void foo(string str)
{
writeln(str);
}
}
void main(){
Runtime.initialize();
Runtime.terminate();
}
Am I doing it wrong ?
Still getting a Segmentation fault
I have no way to test this, but translating the example to D, I
get this:
import core.runtime;
import std.stdio;
extern(C) {
example_init() {
Runtime.initialize();
}
example_exit() {
Runtime.terminate();
}
void foo(int x) {
writeln(2*x);
}
}
// No main
// compile as libffi-example.so
Then in Ruby:
module Example
extend DL::Importable
dlload "./libffi-example.so"
extern "void example_init()"
extern "void example_exit()"
extern "void foo(int)"
end
Example.example_init
Example.foo(3)
Example.example_exit