[swift-users] Still having trouble with C interop (passing buffers)
Rick Mann
rmann at latencyzero.com
Tue Apr 25 17:30:34 CDT 2017
Yup, that seems to be it. I would have thought that init(capacity:) should work, too (it could defer allocation until, say, the call withUnsafeMutableBytes()), and just not zero the contents (the init(count:) call zeroes the contents).
> On Apr 25, 2017, at 15:20 , Philippe Hausler <phausler at apple.com> wrote:
>
>
>> 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(¶ms, 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
>
--
Rick Mann
rmann at latencyzero.com
More information about the swift-users
mailing list