如何在Rubymotion中编写此C代码?

时间:2014-04-08 10:24:50

标签: ios c rubymotion

我正在研究Learning Core Audio: A Hands-on Guide to Audio Programming for Mac and iOS

中的一些代码示例

虽然我以前曾使用过Objective-C,但我现在正在开发一个Rubymotion应用程序,我希望能够将书中的代码转换为我的应用程序的Rubymotion。

虽然有一些我不确定的C函数和习语。任何人都可以告诉我IF和我如何在RM中重写以下内容?

AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));

我已经确定asbd是指针。所以:

asbd = Pointer.new(AudioStreamBasicDescription.type)

但是sizeof()memset()函数都咳嗽了 NoMethodErrors

1 个答案:

答案 0 :(得分:1)

asbd不是指针,而是结构。在由类表示的RubyMotion中。 memset只是将结构的内存初始化为全零。我不确定RubyMotion默认情况下是否将字段设置为零,因此您可以像这样手动初始化每个字段(如果有点罗嗦,这肯定会更清楚):

asbd = AudioStreamBasicDescription.new

asbd.mSampleRate = 0.0
asbd.mFormatID = 0
asbd.mFormatFlags = 0
asbd.mBytesPerPacket = 0
asbd.mFramesPerPacket = 0
asbd.mBytesPerFrame = 0
asbd.mChannelsPerFrame = 0
asbd.mBitsPerChannel = 0
asbd.mReserved = 0

如果您需要指向asbd的指针,我相信您这样做:

asbd_ptr = Pointer.new(AudioStreamBasicDescription.type)
asbd_ptr[0] = asbd

因此,如果想要传递&asbd,则会传递asbd_ptr