Gibt es eine Möglichkeit, eine C-Funktion aufzurufen, die von einer Dylib von Swift geladen wurde?Swift: So rufen Sie eine C-Funktion auf, die von einer Dylib geladen wurde
Das ist mein dylib Datei:
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
kompilieren dylib und überprüfen:
nm -gU libCppDemoLibrary.dylib
0000000000000f80 T _add
... kopieren libCppDemoLibrary.dylib
-~/lib
...
Swift Programm:
@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)
}
}
}
Wie rufe ich die add
Funktion? Ist es in Ordnung, eine Dylib zu verwenden? Sollte ich stattdessen diese Quellen meinem schnellen Projekt hinzufügen?
1. Warum dyld? 2. Haben Sie versucht, es zu einem Modul zu machen und es von Swift zu importieren? – jtbandes
Siehe http://spin.atomicobject.com/2015/02/23/c-libraries-swift/ – jtbandes
Der Titel der Frage ist ein wenig irreführend, weil 'add' eine C-Verknüpfung hat. Sie konnten eine C++ Funktion von Swift nicht aufrufen. –