首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C结构

使用C结构
EN

Stack Overflow用户
提问于 2016-08-01 16:06:54
回答 1查看 665关注 0票数 1

我使用的是一个由C制造的供应商提供的框架,这个框架有以下结构:

代码语言:javascript
复制
typedef struct tTINFO {
    int size;              

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

就像这样被导入到which中:

代码语言:javascript
复制
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

我试图迅速地将其用作:

代码语言:javascript
复制
var cI:TINFO = TINFO(size: sizeof(TINFO),
                     vId: "vID",
                     cId: "cID",
                     cmm: nil,
                     cKey: "cKey")

并将其传递给报头中的以下函数

代码语言:javascript
复制
public func TI(CI: UnsafeMutablePointer<TINFO>, _ Reserved: UnsafeMutablePointer<Void>, _ Flags: Int32) -> TT

因此:

代码语言:javascript
复制
TI(&cI, nil, initOptions)

现在编译器给我的代码没有错误,它在运行时也不会崩溃,但是在使用此代码时,框架会返回一个错误。

我的问题是:

  • 我对结构的初始化是否正确,我真的认为这是错误的,因为我不能再打印cI的内容--我只得到指针值?如果是错的,我怎么改正呢?
  • 我在几个地方看到,要得到结构的大小,我应该使用TInfo,其他人说是因为填充,但我仍然不清楚它们何时应用,因为它们都返回相同的大小。

如果能帮上忙就好了。顺便说一下,我用的是迅捷2.3

编辑:

由于@AMomchilov在此post中共享的链接,在将每个struct属性传递给结构之前将其设置为CChar,如下所示:

代码语言:javascript
复制
("vID" as NSString).UTF8String
EN

回答 1

Stack Overflow用户

发布于 2016-08-02 02:15:36

您需要调用utf8String来获得必要的UnsafePointer<Int8>空条件字符串:

代码语言:javascript
复制
import Foundation
var cI:TINFO = TINFO(size: sizeof(TINFO),
                     vId: "vID".utf8String,
                     cId: "cID".utf8String,
                     cmm: nil,
                     cKey: "cKey".utf8String)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38703398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档