2016-08-01 3 views
0

Я использую рамки от поставщика, сделанного в C, эта система имеет следующую структуру:Использование C Структуры в быстрой

typedef struct tTINFO { 
    int size;    

    const char* vId; 
    const char* cId; 
    const char* cmm; 
    const char* cKey; 
} TINFO; 

, который импортируется в стриж как таковые:

public struct tTINFO { 
    /**< \brief Size of the structure */ 
    public var size: Int32 

    /**< \brief Pointer to a null-terminated string*/ 
    public var vId: UnsafePointer<Int8> 
    /**< \brief Pointer to a null-terminated string*/ 
    public var cId: UnsafePointer<Int8> 
    /**< \brief Pointer to a null-terminated string. May be NULL. */ 
    public var cmm: UnsafePointer<Int8> 
    public var cKey: UnsafePointer<Int8> 
    public init() 
    public init(size: Int32, vId: UnsafePointer<Int8>, cId: UnsafePointer<Int8>, cmm: UnsafePointer<Int8>, cKey: UnsafePointer<Int8>) 
} 
public typealias TINFO = tTINFO 

К который я пытался использовать в стрижа как:

var cI:TINFO = TINFO(size: sizeof(TINFO), 
        vId: "vID", 
        cId: "cID", 
        cmm: nil, 
        cKey: "cKey") 

и она будет передана следующей функции в заголовке

public func TI(CI: UnsafeMutablePointer<TINFO>, _ Reserved: UnsafeMutablePointer<Void>, _ Flags: Int32) -> TT 

как таковые:

TI(&cI, nil, initOptions) 

Теперь компилятор не дает мне никаких ошибок в мой код, ни он выходит из строя, когда он работает, однако, рамки при использовании этого кода в стриже возвращает мне ошибку.

Мои вопросы:

  • Является ли моя инициализация структуры правильно, я действительно думаю, что это не так, как я не могу больше печатать содержимое ХИ я только получить значения указателей? Если это неправильно, как я могу исправить?

  • Я видел в нескольких местах, чтобы получить размер структуры, я должен использовать sizeof (TInfo), другие говорят, что его strideof из-за заполнения, но это все еще не ясно для меня, когда они применяются, поскольку оба возвращают одинаковый размер.

был бы признателен за любую помощь в этом. Btw я использую swift2.3

Edit:

Благодаря ссылке разделяемой @AMomchilov в этом post настройки каждой структуры собственности как CChar перед передачей его в структуры работали, такие как:

("vID" as NSString).UTF8String 
+0

Что ошибку вы дать? – Carcigenicate

+1

http://stackoverflow.com/q/30042494/3141234 – Alexander

+0

@Carcigenicate ошибки связаны с поставщиком, и он просто возвращает общую ошибку, к сожалению :( – RicardoDuarte

ответ

0

Вам нужно позвонить utf8String, чтобы получить необходимую UnsafePointer<Int8>, нуль-termianted строки:

import Foundation 
var cI:TINFO = TINFO(size: sizeof(TINFO), 
        vId: "vID".utf8String, 
        cId: "cID".utf8String, 
        cmm: nil, 
        cKey: "cKey".utf8String) 
Смежные вопросы