我在 objective-c 中使用C指针
这是我的C函数:
long ListReaders(
__out char** szReadersList,
__out unsigned long* pulListLen){
}
long Result;
char* pszReadersList;
unsigned long pulListLen;
Result=ListReaders(&pszReadersList, & pulListLen);
在 objective-c 中使用指针非常容易,但是当我快速尝试使用指针时,还有其他概念,例如
UnsafeMutablePointer
,UnsafePointer
等。如何快速使用相同的C函数
我试图使用它显示像这样
var Result :CLong?
var pszReadersList :CChar?
var pulListLen: CUnsignedLong?
Result=ListReaders(szReadersList:UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!>, pulListLen: UnsafeMutablePointer<UInt>!UnsafeMutablePointer<UInt>!>)
你们能建议我快速使用C指针吗
最佳答案
调用C函数的代码应如下所示:
var result: CLong = 0
var pszReadersList: UnsafeMutablePointer<CChar>? = nil
var pulListLen: CUnsignedLong = 0
result = ListReaders(&pszReadersList, &pulListLen)
一些要点:
CLong?
-> CLong
,CUnsignedLong?
-> CUnsignedLong
当声明一些非可选基本类型的变量时,您可能会遇到一些错误,在这种情况下,不要使用可选,而只给它们提供初始值。
UnsafeMutablePointer<AType>
或UnsafePointer<AType>
的参数时,通常会声明AType
类型的变量并将其作为inout参数(由前缀“&”指定)传递。ListReaders
的参数类型变为UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!
和UnsafeMutablePointer<UInt>!
,因此您需要声明UnsafeMutablePointer<Int8>?
(== UnsafeMutablePointer<Int8>?
)和UInt
(== CUnsignedLong
)类型的变量。 关于ios - 如何快速传递C指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41445382/