【发布时间】:2019-09-28 12:13:05
【问题描述】:
我正在尝试将字符串参数从 swift 函数包装器传递给 C 函数,该函数采用 char*。
这是一个 c 函数
long swe_fixstar2_ut(char* star, double tjd_ut, long iflag, double* xx, char* serr);
参数star 必须为返回的星名提供至少41 个字符。如果找到一颗星,则返回其名称。此函数从 txt 文件中搜索星名。
导入到 Swift 中的函数是这样的
swe_fixstar_ut(star: UnsafeMutablePointer<Int8>!, tjd_ut: Double, iflag: int32,
xx: UnsafeMutablePointer<Double>!, serr: UnsafeMutablePointer<Int8>!)
我想实现这样的目标
public func sweFixStarsUT(star: String, tjdUT: Double, iFlag: Int32) {
let xx: UnsafeMutablePointer = UnsafeMutablePointer<Double>.allocate(capacity:6)
let serr:UnsafeMutablePointer = UnsafeMutablePointer<CChar>.allocate(capacity:256)
swe_fixstar_ut(star, tjdUT, iFlag, xx, serr)
}
我看了几个类似的问题,但没有解决我的问题。
Convert a Swift Array of String to a to a C string array pointer
How to pass an array of Swift strings to a C function taking a char ** parameter
其实这个函数来自瑞士星历C库。有兴趣的小伙伴可以看看这个链接
【问题讨论】:
标签: c swift language-interoperability