I still have a very hard time working with C. In this case, I’d like to call a SQLite function that sometimes allocates an error string internally and passes it back via char**
parameter:
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
public
func
sqlite3_exec(_: OpaquePointer!,
_ sql: UnsafePointer<Int8>!,
_ callback: (@convention(c) (UnsafeMutableRawPointer?,
Int32,
UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?,
UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?) -> Int32)!,
_: UnsafeMutableRawPointer!,
_ errmsg: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!) -> Int32
This string is freed with a call to void sqlite3_free(void*);
How can I get this as a Swift String
?
Also, Xcode 12.3 gives this helpful diagnostic (obviously that code won’t work, was just experimenting and noticed the diagnostic):