Chris@2: Chris@2: #include Chris@2: #include Chris@2: Chris@2: using namespace std; Chris@2: Chris@2: int main(int argc, char **argv) Chris@2: { Chris@2: string example = "./example.so"; Chris@2: Chris@2: void *lib = dlopen(example.c_str(), RTLD_LAZY | RTLD_LOCAL); Chris@2: if (!lib) { Chris@2: cerr << "failed to open " + example + ": " << dlerror() << endl; Chris@2: return 1; Chris@2: } Chris@2: Chris@2: typedef const char *(*RequestFn)(const char *); Chris@2: RequestFn reqFn = (RequestFn)dlsym(lib, "vampipeRequestJson"); Chris@2: if (!reqFn) { Chris@2: cerr << "failed to find request function in " + Chris@2: example + ": " << dlerror() << endl; Chris@2: return 1; Chris@2: } Chris@2: Chris@2: typedef void (*FreeFn)(const char *); Chris@2: FreeFn freeFn = (FreeFn)dlsym(lib, "vampipeFreeJson"); Chris@2: if (!freeFn) { Chris@2: cerr << "failed to find free function in " + Chris@2: example + ": " << dlerror() << endl; Chris@2: return 1; Chris@2: } Chris@2: Chris@2: string listRequest = "{\"type\": \"list\"}"; Chris@2: const char *listResponse = reqFn(listRequest.c_str()); Chris@2: cout << listResponse << endl; Chris@2: freeFn(listResponse); Chris@4: Chris@4: string loadRequest = "{\"type\":\"load\",\"content\": {\"pluginKey\":\"vamp-example-plugins:zerocrossing\",\"inputSampleRate\":44100,\"adapterFlags\":[\"AdaptAllSafe\"]}}"; Chris@4: const char *loadResponse = reqFn(loadRequest.c_str()); Chris@4: cout << loadResponse << endl; Chris@4: freeFn(loadResponse); Chris@2: } Chris@2: