从Swift调用C函数

我想从Swift调用C函数,但我不知道如何定义variables来传递参数。

函数c是:

DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ); 

主要问题是pszFieldNamepnWidthpnDecimals 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 })