标签: djinni

带有 Android NDK 的 Asio(非升压)

我想在我的项目中使用非Boost asio(http://think-async.com/)。该项目是用 C++ 编写的,我使用 dropbox/djinni 生成 Android 和 iOS 的包装器。在本机 C++ 中,asio 可以正常工作,无需包含 boost。但我还是停留在Android部分。

在 app/build.gradle 中我添加了以下几行:

路径/到/asio 标头
cppFlags += "-DASIO_STANDALONE"

当我构建项目时,它给了我以下错误:

编译 src.cpp 失败。
taps-api\asio\asio\impl\src.cpp:21:3: 错误:#warning“此文件已弃用。” [-Werror=cpp]
# 警告“此文件已弃用。”
^
taps-api\asio\asio\impl\src.cpp:22:3:错误:#warning“请改为 #include <asio/impl/src.hpp>。” [-Werror=cpp]
# 警告“请改为 #include <asio/impl/src.hpp>。”
^ 在 Taps-api\asio\asio\impl\src.cpp:25:0 包含的文件中:
Taps-api\asio/asio/impl/src.hpp:19:3:错误:#error 不要编译 Asio 库定义了 ASIO_HEADER_ONLY 的源
# 错误 不要编译定义了 ASIO_HEADER_ONLY 的 Asio 库源

有谁知道要做什么/添加什么?我还想问,我可以避免在我的项目(在 android/ios 中)中包含 boost headers/libs 吗?

我使用的是稳定的 Android Studio 1.3。我也发现了类似的问题,但这并不能解决我的问题。

c++ android boost-asio android-ndk djinni

5
推荐指数
0
解决办法
1616
查看次数

为djinni定义const getters

我用djinni定义了一个C++接口:

member = interface +c {
    get_id(): string;
    get_name(): string;
}
Run Code Online (Sandbox Code Playgroud)

我继承的实现使用const getters,即

class MyMemeber: public Member {
  private:
    string id;
    string name;
  public:
    string get_id() const override { return id; }
    string get_name() const override { return name; }
}
Run Code Online (Sandbox Code Playgroud)

由于const属性,这显然无法编译.我可以教djinni用const getters生成基本接口吗?

c++ java-native-interface const djinni

5
推荐指数
1
解决办法
263
查看次数

Dropbox Djinni - 接口继承

有没有办法在Djinni的DSL中继承/扩展接口?

例如:

parent = interface +c {
  parentMethod();
}

child1 = interface +c {
  childMethod1();
}

child2 = interface +c {
  childMethod2();
}
Run Code Online (Sandbox Code Playgroud)

我要继承child1child2距离parent.

cross-platform dropbox djinni

4
推荐指数
1
解决办法
850
查看次数

djinni - C++和swift/objective C/java之间的指针和循环引用

我有两个djinni接口,一个用Swift/objective C/java实现SwiftObj,另一个用C++实现CPPObj.

SwiftObj = interface +o +j {
    someSwiftMethod();
}

CPPObj = interface +c {
    static create(swiftObj: SwiftObj): CPPObj;
    someCPPMethod();
}
Run Code Online (Sandbox Code Playgroud)

他们都有一个指向对方,所以SwiftObj就能够调用someCPPMethod()CPPObj,反之亦然:CPPObj将能够调用someSwiftMethod()来自SwiftObj:

在快速:

  • 类变量: var myCPPObj: SwiftObj!
  • 创作: myCPPObj = MyCPPObj.create(self)
  • 用法: myCPPObj.someCPPMethod()

在c ++中:

  • 类变量: shared_ptr<SwiftObj> mySwiftObj_;
  • 用法: mySwiftObj_->someSwiftMethod();

所以这里的问题是,由于循环引用,这些对象没有被垃圾收集(我尝试并删除了循环引用,并且它们得到了GCed).

但后来我尝试将其中一个指针设置为弱点.在C++中:weak_ptr<SwiftObj> mySwiftObj_;...但这使得mySwiftObj_它立即被GC,即使它实际上仍然存在于swift中.当我将swift指针设置为弱并且C++设置为强时,同样的事情发生了.

那么我该如何处理这种情况呢?(除了手动将其中一个指针设置为null).关于指针在djinni中如何实际工作的任何见解?

谢谢!

c++ objective-c ios swift djinni

4
推荐指数
1
解决办法
318
查看次数