我正在尝试通过FFI在Rust中使用“xerces-c”,但没有成功。在C++中,我将编写以下代码来使用它:

XMLPlatformUtils::Initialize();
{
  XercesDOMParser domParser;
  ParserErrorHandler parserErrorHandler;

  domParser.setErrorHandler(&parserErrorHandler);
  domParser.setDoSchema(true);
  domParser.setValidationSchemaFullChecking(true);

  domParser.parse(xmlFilePath.c_str());
  if(domParser.getErrorCount() != 0) {
     // ...
  }
}
XMLPlatformUtils::Terminate();

如何在Rust中使用这些“复杂”数据类型?我发现了很多导出/创建FFI以在其他语言中使用它的示例,但是没有一个示例可以在Rust中使用复杂的类型。
extern crate libc;

#[link(name = "xerces-c")]
extern {
    // How do i have to implement the constructor here?
}

最佳答案

Rust不支持C++的FFI。如果要使用此库,则必须查找或编写为该库提供纯C接口(interface)的转换层,然后将其绑定(bind)。

09-15 21:16