[swift-users] Still having trouble with C interop (passing buffers)

Philippe Hausler phausler at apple.com
Tue Apr 25 17:20:21 CDT 2017


> On Apr 25, 2017, at 2:57 PM, Rick Mann via swift-users <swift-users at swift.org> wrote:
> 
> I'm trying to pass a Data of allocated size to a C function for it to fill in:
> 
> 
> lib_example_call(_ params: UnsafePointer<lib_call_params_t>!, _ data: UnsafeMutableRawPointer!)
> 
> ...
> {
>    self.dataBuffer = Data(capacity: BufferSizeConstant)


If you want to create a buffer with a given count you should use Data(count: Int), the method you are using just reserves a given capacity. (from what I can tell from your code that is likely what you really want)

> 
>    var params = lib_call_params_t();
>    params.data_capacity = BufferSizeConstant;
> 
>    self.dataBuffer?.withUnsafeMutableBytes
>    { (inBuffer) -> Void in
>        lib_example_call(&params, inBuffer)
>    }
> }
> 
> I later get called back by the library with a size value of the actual data it got. self.dataBuffer is a var. I set self.dataBuffer?.count = result size, which is a reasonable value.
> 
> Unfortunately, the resulting buffer is all zeros. The data generated by the call is definitely not all zero, and a C example program using the same library works correctly.
> 
> So, I think there's something wrong in the way I'm making the call.
> 
> Can anyone please enlighten me? Thanks!
> 
> -- 
> Rick Mann
> rmann at latencyzero.com
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users



More information about the swift-users mailing list