从Swift调用C函数
我想从Swift调用C函数,但我不知道如何定义variables来传递参数。
函数c是:
DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals );
主要问题是pszFieldName
, pnWidth
和pnDecimals
inout参数。 我试过了:
var dbf:DBFHandle = DBFOpen(pszPath, "rb") var fName:[CChar] = [] var fieldWidth:Int32 = 0 let fieldDecimals:Int32 = 0 let fieldInfo:DBFFieldType = DBFGetFieldInfo(dbf, i, fName, &fieldWidth, &fieldDecimals)
但它给了我一个错误
Cannot invoke 'DBFGetFieldInfo' with an argument list of type '(DBFHandle, Int32, [CChar], inout Int32, inout Int32)' Expected an argument list of type '(DBFHandle, Int32, UnsafeMutablePointer<Int8>, UnsafeMutablePointer<Int32>, UnsafeMutablePointer<Int32>)'
有任何想法吗?
UnsafeMutablePointer<Int8>, UnsafeMutablePointer<Int32>, UnsafeMutablePointer<Int32>
您需要将variables转换为方法签名所需的适当types。
C语法:
- consttypes*
- types*
Swift语法:
- UnsafePointer
- UnsafeMutablePointer
苹果在这里介绍了使用Cocoa的Swift和Objective-C参考。
C语法—–> Swift语法
consttypes* —–> UnsafePointer
键入* —–> UnsafeMutablePointer
input的数量和types应该是一样的
要从string中创buildUnsafeMutablePointer<Int8>
,请使用:
String(count: 10, repeatedValue: Character("\0")).withCString( { cString in println() // Call your function here with cString })