Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Calling static C++ method from Rust

Дата публикации: 04-10-2026 14:10:07


I have implemented static C++ class in some lib. I would like to use it in Rust code without changing the lib.
But I can't find the way to use. Is it possible?
C++ header.
class Comm {
public:
static Buffer makePacket(uint8_t *data, CommHeaderData header);
static bool fetchData(const uint8_t *rawData, const uint8_t rawDataSize, uint8_t *data, const uint8_t dataSize, CommHeaderData &header);
static uint8_t getPacketSize();
static bool validatePacket(uint8_t *data, uint8_t dataSize);
static Buffer createBuffer(size_t dataSize);
static void freeBuffer(Buffer &buffer);
public:
static const uint8_t zdataSize;
static const uint8_t startPid;
static const uint8_t defaultCap;
static const uint8_t maxPayload;
static const size_t headerSize;
};
And draft of Rust caller interface for it.
mod ffi {
#[cxx_name = "CommHeaderData"]
struct CommHeaderDataBridge {
dataSize: usize,
version: u8,
pid: u16,
capabilities: u8,
}
#[cxx_name = "Buffer"]
struct BufferBridge {
dataPtr: u8,
dataSize: usize,
}
unsafe extern "C++" {
include!("libs/Hen-Lib/proto/Comm.h");
type Comm;
fn fetchData(
rawData: &[u8],
rawDataSize: u8,
data: &mut [u8],
dataSize: u8,
header: &mut CommHeaderDataBridge,
) -> bool;

fn makePacket(data: &[u8], header: CommHeaderDataBridge) -> BufferBridge;
}
}
2 posts - 2 participants
Read full topic

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Type erasure and dyn lifetime in a NonNull/Box struct field08.5504-10-2026
2Rust abstractions for kernel sources04.6208-10-2026
3Optimization of inlined functions returning Result?07.3606-10-2026
4Why no Dependent Matrix Type?05.1608-10-2026
5Arena's and alignment07.304-10-2026
6Why is f32/f64::sqrt not const?022.7206-10-2026
7Strategies for dyn trait objects with optional behavior?07.1206-10-2026
8Does my lockfree stack impl look correct?06.0605-10-2026
9Architecture review of a Hyper/Tower-based web framework (Toxi)015.4606-10-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 9. Тональность: 0. Информативность: 9.94. Источник: users.rust-lang.org.