C'è un modo per chiamare una funzione C caricata da un dylib da Swift?Swift: Come chiamare una funzione C caricata da un dylib
Questo è il mio dylib di file:
cppdemofile.cpp
#include "cppdemofile.h"
int add(int a, int b) {
return a + b;
}
cppdemofile.h
#ifndef __CppDemoLibrary__cppdemofile__
#define __CppDemoLibrary__cppdemofile__
#pragma GCC visibility push(default)
extern "C" int add(int a, int b);
#pragma GCC visibility pop
#endif
compilazione di dylib e verificare:
nm -gU libCppDemoLibrary.dylib
0000000000000f80 T _add
... copiare libCppDemoLibrary.dylib
-~/lib
...
programma Swift:
@IBAction func buttonClick(sender: NSButton) {
let handle = dlopen("libCppDemoLibrary.dylib", RTLD_NOW)
if (handle != nil) {
var sym = dlsym(handle, "add")
if (sym != nil) {
let pointer = UnsafeMutablePointer<(CInt, CInt) -> CInt>(sym)
// When debugging, I'm reaching up to this point...
// but now, how do I call the 'add' function here???
// var result = ???
// label.stringValue = "Total: " + String(result)
}
}
}
Come chiamare la funzione add
? Va bene usare un dylib? Dovrei invece aggiungere queste fonti al mio progetto rapido?
1. Perché dyld? 2. Hai provato a trasformarlo in un modulo e importarlo da Swift? – jtbandes
Vedere http://spin.atomicobject.com/2015/02/23/c-libraries-swift/ – jtbandes
Il titolo della domanda è un po 'fuorviante perché 'add' ha il collegamento C. Non è possibile chiamare una funzione C++ da Swift. –