我是全新的Objective C
,我正在尝试用它来包装一个C-library
. 我有一个main.m
wrap.m
和wrap.h
文件。根据我在包含的头文件@interface
和源文件中收集的内容,我将包含@implementation
但是我并没有真正理解要包含在每个文件中的内容。现在我的主要文件是:
int copy_data(struct archive *ar, struct archive *aw) {
for (;;) {
const void *buff;
size_t size;
off_t offset;
int r = archive_read_data_block(ar, &buff, &size, &offset);
if (r == ARCHIVE_EOF)
return (ARCHIVE_OK);
archive_write_data_block(aw, buff, size, offset);
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
struct archive *a;
struct archive *ext;
struct archive_entry *entry;
int flags;
int r;
/* Select which attributes we want to restore. */
flags = ARCHIVE_EXTRACT_TIME;
flags |= ARCHIVE_EXTRACT_PERM;
flags |= ARCHIVE_EXTRACT_ACL;
flags |= ARCHIVE_EXTRACT_FFLAGS;
a = archive_read_new();
archive_read_support_format_all(a);
archive_read_support_compression_all(a);
ext = archive_write_disk_new();
archive_write_disk_set_options(ext, flags);
archive_write_disk_set_standard_lookup(ext);
r = archive_read_open_filename(a, argv[1], 10240);
for (;;) {
r = archive_read_next_header(a, &entry);
if (r == ARCHIVE_EOF)
break;
r = archive_write_header(ext, entry);
if (archive_entry_size(entry) > 0) {
copy_data(a, ext);
}
archive_write_finish_entry(ext);
}
archive_read_close(a);
archive_read_free(a);
archive_write_close(ext);
archive_write_free(ext);
NSLog(@"No Issues");
}
return 0;
}
到目前为止,我在wrap.h
文件中得到的是:
typedef struct{
int *a;
int *ext;
}archive;
@interface main : NSObject
@property int flags;
@property int r;
我不知道这是否接近我需要做的事情,并且我ARCHIVE_EXTRACT
说它们是未声明的标识符时遇到了错误,我认为它们也必须进入我的wrap.h
文件,但我不确定该怎么做。任何帮助将不胜感激!