如何在Swift 5中将结构指针创建为UnsafeMutablePointer <Int32>

时间:2019-09-14 06:54:35

标签: pointers structure swift5 int32

我正在尝试创建 swift软件包。在swift软件包中,我必须从 .dylib 文件调用 c函数
swift软件包中可能不支持 bridging-header 文件方法,因此,我尝试使用 dlopen()函数在swift中调用c函数。

C头文件中的函数声明

extern BInfo create(PRef p0, char* p1, BConfig* p2, char** p3);

方法1:
快速生成的接口,而在项目中不包含结构声明头文件。

public func create(_ p0: Int32, _ p1: UnsafeMutablePointer<Int8>!, _ p2: UnsafeMutablePointer<Int32>!, _ p3: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!) -> Int32


typealias create = @convention(c)(Int32, UnsafeMutablePointer<Int8>?, UnsafeMutablePointer<Int32>?, UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?)->Int32

方法2:
快速生成的接口,而无需在项目中包括结构声明头文件。

public func create(_ p0: PRef, _ p1: UnsafeMutablePointer<Int8>!, _ p2: UnsafeMutablePointer<BConfig>!, _ p3: UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!) -> BInfo


输入第二种方法的别名

typealias create = ((PRef, UnsafeMutablePointer<Int8>?, UnsafeMutablePointer<BConfig>?, UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>?)-> (BInfo))

使用第二种方法,我能够编译和运行代码,但遇到错误

Can't unsafeBitCast between types of different sizes

问题:   
  方法1   
   1)如何将结构对象转换为UnsafeMutablePointer ! ?   
  方法二   
   1)我该如何解决“不能在不同大小的类型之间使用unsafeBitCast”的错误?
swift包中还有其他方法可以调用c函数吗?

0 个答案:

没有答案