mirror of
				https://github.com/pocketpy/pocketpy
				synced 2025-11-04 10:40:19 +00:00 
			
		
		
		
	support dynamic library.
This commit is contained in:
		
							parent
							
								
									1127d59b47
								
							
						
					
					
						commit
						dc546f5699
					
				@ -50,4 +50,13 @@ using module_ = module;
 | 
			
		||||
    }                                                                                              \
 | 
			
		||||
    static void _pkbind_register_##name(::pkbind::module& variable)
 | 
			
		||||
 | 
			
		||||
#define PYBIND11_MODULE(name, variable)                                                            \
 | 
			
		||||
    static void _pkbind_register_##name(::pkbind::module& variable);                               \
 | 
			
		||||
    extern "C" bool pybind_module_initialize() {                                                   \
 | 
			
		||||
        auto m = ::pkbind::module::create(#name);                                                  \
 | 
			
		||||
        _pkbind_register_##name(m);                                                                \
 | 
			
		||||
        return true;                                                                               \
 | 
			
		||||
    }                                                                                              \
 | 
			
		||||
    static void _pkbind_register_##name(::pkbind::module& variable)
 | 
			
		||||
 | 
			
		||||
}  // namespace pkbind
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,17 @@ PYBIND11_EMBEDDED_MODULE(example, m) {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PYBIND11_MODULE(example3, m) {
 | 
			
		||||
    m.def("add", [](int a, int b) {
 | 
			
		||||
        return a + b;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    auto math = m.def_submodule("math");
 | 
			
		||||
    math.def("sub", [](int a, int b) {
 | 
			
		||||
        return a - b;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
TEST_F(PYBIND11_TEST, module) {
 | 
			
		||||
@ -52,4 +63,20 @@ TEST_F(PYBIND11_TEST, raw_module) {
 | 
			
		||||
    EXPECT_EQ(math2.attr("sub")(4, 3).cast<int>(), 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(PYBIND11_TEST, module3) {
 | 
			
		||||
    pybind_module_initialize();
 | 
			
		||||
 | 
			
		||||
    py::exec("import example3");
 | 
			
		||||
    EXPECT_EVAL_EQ("example3.add(1, 2)", 3);
 | 
			
		||||
 | 
			
		||||
    py::exec("from example3 import math");
 | 
			
		||||
    EXPECT_EVAL_EQ("math.sub(1, 2)", -1);
 | 
			
		||||
 | 
			
		||||
    py::exec("from example3.math import sub");
 | 
			
		||||
    EXPECT_EVAL_EQ("sub(1, 2)", -1);
 | 
			
		||||
 | 
			
		||||
    auto math = py::module::import("example3.math");
 | 
			
		||||
    EXPECT_EQ(math.attr("sub")(4, 3).cast<int>(), 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user