Tag: 迅速

Cast C struct指向Swift结构不安全指针的双指针

我需要在Swift(4)中进行以下C转换: struct A ** castme = input struct B * tothis = (struct B *)castme 在Swift中, castme类型是UnsafeMutablePointer<UnsafeMutablePointer?>! 我假设我正在尝试转换为UnsafeMutablePointer! ? 另外,说我也可以直接将*(castme)转换为(struct B)是否正确? 如果是,是否可以通过从UnsafeMutablePointer?进行投射来UnsafeMutablePointer? 到B ? 我看到了这个线程但是无法从中获得我需要的东西: 在Swift中转换为不同的C struct unsafe指针

如何在swift中将wchar_t转换为字符串

我想从C库中获取一个wchar_t数组,并将其转换为swift数据结构,我的代码在这里: func getResults(recognizer: UnsafeMutablePointer, stroke: UnsafeMutablePointer, touchState: Int32) -> [String] { var bufLen : Int32 var buf = UnsafeMutablePointer.alloc(Int(bufLen)) getRecognition(recognizer, stroke, touchState, buf, bufLen) var results = String.fromCString(buf)! //this line has an error, cause the buf is wchar_t*, not char* } 我怎么能将buf转换为swift数据结构? 我知道如果buf是UnsafeMutablePointer.alloc(Int(bufLen)) ,我们可以使用String.fromCString(buf) ! 转换它。 如果我println(buf [0]),它打印一个整数67,这是’C’的ascii值,我怎么println(buf [0])为’C’而不是0? 谢谢!

从mach_timebase_info()创建结构

在C中创建时基信息结构很容易,但在Swift中,以下内容在操场中不起作用: let timebaseInfo: mach_timebase_info_data_t = mach_timebase_info(&timebaseInfo) 错误是Variable used within its own initial value 我理解错误,但我无法想到一种方法来做到这一点,而不是下降到C.是否有一个Swift只有我失踪的方式? 任何帮助将不胜感激。 🙂 编辑:其实我看到上面的“A”问题,“=”没有意义。 但我也尝试了以下内容: let timebaseInfo: mach_timebase_info_data_t mach_timebase_info(&timebaseInfo)’ 在初始化之前使用错误表明timebasedInfo。 🙁

将inout值转换为UnsafeMutablePointer <Unmanaged ?>

我在C中有一个带有指针的函数。 我试图从Swift中调用它。 从Swift的Calling C函数 (和个人经验)来看,做&var不起作用。 但是,我无法将&var转换为UnsafeMutablePointer …或任何类型的转换(例如将var的地址分配给另一个类型为UnsafeMutablePointer的变量) (假设Type是一个对象) 谢谢 示例代码: var zero = CreateCompressionSession(&session as UnsafeMutablePointer<Unmanaged?>, Int32(CVPixelBufferGetWidth(pixelBuffer)), Int32(CVPixelBufferGetHeight(pixelBuffer))) 在试图让它打电话时: int CreateCompressionSession(VTCompressionSessionRef* session, int width, int height) { OSStatus err = VTCompressionSessionCreate(NULL, width, height, kCMVideoCodecType_H264, NULL, NULL, NULL, (VTCompressionOutputCallback)vtCallback, NULL, session); NSLog(@”%d %p”, (int)err, session); if (err == noErr) { return 0; } else { return […]

从const char *转换为Swift字符串

我有一个ac函数,我从一个返回const char*的桥接头访问: const char* get_c_string(); 然后我尝试将其转换为Swift字符串: let str = String.fromCString(UnsafePointer(get_c_string())) print(str) …但它只打印垃圾: Optional(“\u{14}\0\0”) 我可以找到如何将Swift字符串传递给C而不是相反的方式。 如何将const char*转换为Swift String? 谢谢!

函数回调从C到Swift

我有这个C函数,只是回调作为参数传递的另一个函数 void call_my_function(void (*callback_function)()) { callback_function(); } 这是C测试代码: void func_to_call() // a simple test function passed in as a callback { printf(“function correctly called”); } void test() // entry point { void (*foo)(); foo = &func_to_call; call_my_function(foo); // pass the address of “func_to_call()” to “call_my_function()” } 本质上,从test() ,我调用call_my_function()传递call_my_function()的地址,然后call_my_function()调用func_to_call() 。 从swift我正确看到函数test()和func_to_call() ,但似乎是这样 void call_my_function(void (*callback_function)()) 无法识别(使用未解析的标识符)如果我删除参数void […]