D equivalent of run-time DLLs / Plugins
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Feb 29 15:34:17 PST 2016
On 02/29/2016 02:40 PM, Chris Katko wrote:
> I want
> to link to piece of D code at run-time. I want my D program to load,
> scan for files which are whatever D-equivalent of a DLL/SO is, and load
> those as well. Calling library functions, and having them call my core
> functions.
It's the same as in C. Assuming that you have a ./libxyz.so that
contains library_function() of type 'int library_func(int)', the
following works:
import std.stdio;
import core.sys.linux.dlfcn;
extern(C) int library_func(int);
alias FuncType = int function(int);
int main()
{
void * lib = dlopen("./libxyz.so", RTLD_NOW);
if (!lib) {
stderr.writefln("Failed to open library");
return 1;
}
auto func = cast(FuncType)dlsym(lib, "library_func");
if (!func) {
stderr.writefln("Failed to find function");
return 1;
}
writefln("Result: %s", func(10));
return 0;
}
Ali
More information about the Digitalmars-d-learn
mailing list