gpt4 book ai didi

sqlite - 如何调用 sqlite3_open(通过引用传递不透明指针)

转载 作者:可可西里 更新时间:2023-11-01 00:53:55 25 4
gpt4 key购买 nike

作为练习,我尝试为 sqlite3 创建一个包装器。我已经设置了桥接 header ,我可以看到 sqlite3 函数的工具提示,但我不知道如何调用 sqlite3_open

sqlite3.h 包含以下 sqlite3sqlite3_open 的定义:

typedef struct sqlite3 sqlite3;

SQLITE_API int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);

这意味着 sqlite3_open 将指向匿名结构指针的指针作为尾随参数,这在工具提示中似乎很清楚:

func sqlite3_open(filename: CString, ppDb: CMutablePointer<COpaquePointer>) -> CInt

知道CMutablePointer的意思是传入&T,我最接近的是:

class Database {
var handle:COpaquePointer

init(file:String) {
let error = sqlite3_open(file as CString, &handle)
}

deinit {
sqlite3_close(handle)
}
}

sqlite3_close 行没有错误,所以我认为我至少接近了,但是 sqlite3_open 行产生了:

Cannot convert the expression's type 'CInt' to type '$T9'

关于如何执行此操作的任何线索?

请不要回答说要使用 FMDB 或其他基于 Objective-C 的接口(interface)。正如我所说,这至少在一定程度上是一个练习,目的是弄清楚如何从 swift 中使用 C 库。

最佳答案

问题不在于 handle 参数,而在于字符串转换。以下作品……

class Database {
var handle: COpaquePointer = nil

init(file: NSString) {
let error = sqlite3_open(file.cStringUsingEncoding(NSUTF8StringEncoding), &handle)
}
}

我不确定为什么“as CString”不起作用。

关于sqlite - 如何调用 sqlite3_open(通过引用传递不透明指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com