我可以使用适当的Obj-C语法重做这个方法,但我想知道如何从Obj-C调用它。该方法看起来像这样
@interface YarMidiCommon : NSObject
static
MIDIPacketList *makePacketList(Byte *packetBuffer, const UInt8 *data, UInt32 size);
@end
但我不知道如何调用该方法。我试过了
Byte packetBuffer[size+100];
MIDIPacketList *packetList = makePacketList(packetBuffer, bytes, size);
但错误是“具有内部链接但未定义”。如果不采用“适当的”Obj-C语法,这可能吗?
对于记录,我想要模拟的方法类似于
+ (MIDIPacketList*) makePacketListWithPacketBuffer:(Byte*)packetBuffer data:(const UInt8 *)data size:(UInt32)size;
这是冗长而烦人的,因为这里的所有东西都是C.无论如何。
答案 0 :(得分:8)
由于该函数是C函数,您需要删除静态关键字,否则它将无法在其翻译单元外看到。一旦你这样做,你的第一个例子将起作用。此外,因为它是一个C函数,将其声明放在@interface
的内部或外部,而@implementation
内部或外部的定义对你将如何调用它没有任何影响。
答案 1 :(得分:5)
将声明视为等同于全局范围中的静态C函数。这与C ++或Java非常不同。此功能没有类范围或外部链接。
因此,@ interface范围不是声明makePacketList
的好地方。该消息表示使用它时定义不可见。
答案 2 :(得分:1)
您需要将该功能移至.m
(如果您仅使用此文件,则有意义)或删除static
关键字。