从Swift 3.0中的c函数传回字符串(char *)

时间:2017-01-29 17:12:47

标签: c++ c swift bridging-header

我正致力于将一堆数据与用c ++编写的程序一起发送到Swift 3用户界面。我试图通过将一个长的json字符串传递给一个简单的c函数来实现这一点,该函数将char字符串作为输入和输出。

这是我在桥接标题中包含的唯一文件:

#ifndef ModelInterface_h
#define ModelInterface_h

#ifdef __cplusplus
extern "C" {
#endif

    const char* ModelInterface(const char *input);

#ifdef __cplusplus
}
#endif


#endif /* ModelInterface_h */

以下是我在Swift 3.0中调用它的方法

let input = "Send In"
let test = ModelInterface(input)
print("Test \(String(cString: test!)) <-- test")

以下是cpp文件中的代码:

#include "json.hpp"
#include "ModelInterface.h"
#include "ShellSitzwohl.h"

// for convenience
using json = nlohmann::json;

const char* ModelInterface(const char *input) {

    ShellSitzwohl shell = ShellSitzwohl();
    ShellFullOutput output = shell.Stress(10, 10);

    // conversion: person -> json
    json j = output;
    std::stringstream stringstream;
    stringstream << j;

    const std::string tmp = stringstream.str();
    const char* cstr = tmp.c_str(); // I can see that cstr is populated correctly

    // return "This works!"; // If I just return this then it gets displayed
    // Test This works! <-- test
    return cstr; // This runs but not displayed correctly
    // Test  <-- test
}

json字符串似乎已创建,如果我传回静态字符串&#34;这有效!&#34;它得到正确显示。不确定在字符串恢复到swift之前是否应该发布某些内容。

0 个答案:

没有答案