1

我正在尝试将 C++ 库移植到 Rust。一个依赖项不是开源的,我只能访问头文件。rust-bindgen并没有从这些头文件生成有效的绑定,在网上搜索了一段时间后,我得出的结论是我需要为上述库编写一个包装器。(这个库的这个头文件来自https://github.com/wpilibsuite/ni-libraries,如果重要的话)。

由于这些问题,我不能在包装器的头文件中包含原始头文件,但我可以在实际的 cpp 文件中包含原始头文件。

要使用类,我只是前向声明了它们,但其中一些标头使用 typedef 和类中的其他字段作为返回类型。似乎没有一种(好的)方法来前向声明或以其他方式使用这些。

我想知道我的方法是否正确,或者是否有更好的方法可以做到这一点,而我对此采取了错误的方式(它可能在自身内部C++rust-bindgen自身内部)。

我当前设置的一个示例:

closed-source.h

class Foo {
    Foo* create();
    int getBar();
}

wrapper.hpp

class Foo;
Foo* foo_create();
int foo_getBar();

wrapper.cpp

#include "closed-source.h"
#include "wrapper.hpp"

Foo* foo_create() {
    return Foo::create();
}
int foo_getBar(Foo* self) {
    return self->getBar();
}
4

0 回答 0