8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

从 Swift 调用 C 函数时,如果没有类型注释,表达式的类型就会产生歧义

Lätizia S 1月前

29 0

我试图从 Swift 调用这个 C 函数并出现编译错误:// headerCURLcode curl_easy_setopt_callback(CURL *curl, CURLoption option, size_t (*param)(char*, size_t, size_t, vo...

我尝试从 Swift 调用此 C 函数并收到编译错误:


// header
CURLcode curl_easy_setopt_callback(CURL *curl, CURLoption option, size_t (*param)(char*, size_t, size_t, void*));

// c file
CURLcode curl_easy_setopt_callback(CURL *curl, CURLoption option, size_t (*param)(char*, size_t, size_t, void*)) {
    return curl_easy_setopt(curl, option, param);
}

错误信息:

Type of expression is ambiguous without a type annotation

使用此代码:

typealias Callback = @convention(c) (
    UnsafeMutableRawPointer?,
    Int32,
    Int32,
    UnsafeMutableRawPointer?
) -> Int32

func testConnection() {
    let curlHandle = curl_easy_init()
    
    // https://support.google.com/accounts/answer/185833?hl=en
    curl_easy_setopt_string(curlHandle, CURLOPT_USERNAME, "***@gmail.com")
    curl_easy_setopt_string(curlHandle, CURLOPT_PASSWORD, "***")
    
    curl_easy_setopt_string(curlHandle, CURLOPT_URL,
                         "imaps://imap.gmail.com:993//%5BGmail%5DSent%20Sent%20Mail");
    
    let callback: Callback = { ptr, size, nmemb, userdata in
        return 0
    }
    
    // Error on the next line: Type of expression is ambiguous without a type annotation
    curl_easy_setopt_callback(curlHandle, CURLOPT_WRITEFUNCTION, callback); 
    
    print("curl_easy_perform")
    let res = curl_easy_perform(curlHandle);
 
    if(res != CURLE_OK) {
        print("curl_easy_perform failed\(res)")
    } else {
        print("success!")
    }
    
    curl_easy_cleanup(curlHandle);
}

不确定我做错了什么。

我包装了 libcurl 的 curl_easy_setopt,因为 Swift 不喜欢可变参数函数。如果有办法摆脱这个包装器 - 我很乐意这么做。

我使用的是 Xcode 15.4,目标是 iOS 17.5。静态 libcurl 的版本是 8.10.1

帖子版权声明 1、本帖标题:从 Swift 调用 C 函数时,如果没有类型注释,表达式的类型就会产生歧义
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Lätizia S在本站《swift》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 编辑您的问题并发布确切的错误消息可能会有所帮助。此外,任何相关的编译器命令行选项。

返回
作者最近主题: