Git Product home page Git Product logo

Comments (1)

dtolnay avatar dtolnay commented on August 21, 2024 2

You could use bindgen for those signatures, or you could put a struct around the commctrl window pointer and treat it as an opaque C type. (Separately I filed #13 to allow skipping the struct wrapper to treat void* itself as the opaque C type.)

// about.h

struct CommctrlWindow {
  void *p;
};

void ShowMessageBox(const CommctrlWindow &parent, int otherData);
// about.cpp

#include "gui/about.h"
#include "src/lib.rs"

void ShowMessageBox(const CommctrlWindow &parent, int otherData) {
  void *p = parent.p;
  (void)p;
  (void)otherData;
}
// lib.rs

use cxx::UniquePtr;
use ffi::CommctrlWindow;

#[cxx::bridge]
mod ffi {
    extern "C" {
        include!("gui/about.h");

        type CommctrlWindow;
        fn ShowMessageBox(parent: &CommctrlWindow, other_data: i32);
    }

    extern "Rust" {
        fn function_called_from_c(
            parent: UniquePtr<CommctrlWindow>,
            other_data: i32,
        );
    }
}

fn function_called_from_c(parent: UniquePtr<CommctrlWindow>, other_data: i32) {
    // processing and such
    let parent = parent.as_ref().unwrap();
    ffi::ShowMessageBox(parent, other_data);
}

Note: make sure to pull in cxx 0.1.1 because 0.1.0 had a bug in passing UniquePtr as an extern "Rust" function argument (#14).

from cxx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.