I hit the send button too soon. The example error I intended to include is [ 79%] Building CXX object CMakeFiles/msc_basis_transcoder_js.dir/interface/js_binding/transcoder_wrapper.cpp.o /src/interface/js_binding/transcoder_wrapper.cpp:333:49: error: no viable conversion from 'TranscodedImage *' to 'allow_raw_pointer<TranscodedImage *>' 333 | allow_raw_pointer<TranscodedImage*> dst = new TranscodedImage(tiByteLength)); | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /emsdk/upstream/emscripten/cache/sysroot/include/emscripten/bind.h:329:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'TranscodedImage *' to 'const allow_raw_pointer<msc::TranscodedImage *> &' for 1st argument
I do not know how to do a conversion to allow_raw_pointer<TranscodedImage*>. I also want to avoid a copy on returning this from the native function as the image is potentially large. Regards -Mark > On May 23, 2025, at 22:04, キャロウ マーク <git...@callow.im> wrote: > > I have embind code that does the following to return something from native to > JS. > > val ret = val::object(); > if (status) { > ret.set("transcodedImage", dst); > } > return ret; > > where dst is > > TranscodedImage* dst > > Since 4.0.9 I get (I've removed the backtrace from my code to the assertion > statement) > > /emsdk/upstream/emscripten/cache/sysroot/include/emscripten/wire.h:124:19: > error: static assertion failed due to requirement > '!std::is_pointer<msc::TranscodedImage *>::value': Implicitly binding raw > pointers is illegal. Specify allow_raw_pointer<arg<?>> > 124 | static_assert(!std::is_pointer<T*>::value, "Implicitly binding > raw pointers is illegal. Specify allow_raw_pointer<arg<?>>"); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > ... > /src/interface/js_binding/transcoder_wrapper.cpp:277:21: note: in > instantiation of function template specialization > 'emscripten::val::set<char[16], msc::TranscodedImage *>' requested here > 277 | ret.set("transcodedImage", dst); > | ^ > > > I cannot figure out how to specify `allow_raw_pointer`. I added `, > allow_raw_pointers()` to the end of the function declaration in the > EMSCRIPTEN_BINDINGS section but I got the same error. I have tried to use > `allow_raw_pointer` template with TranscodedImage* as the arg in various ways > but I am clearly not doing it the right way. I get a log of different errors. > For example > > What is the right way? > > The documentation did not help. > https://emscripten.org/docs/api_reference/bind.h.html#how-to-use-this-api > just says "type allow_raw_pointer” under a heading of “Policies.” > https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#embind > does not even mention `allow_raw_pointer`. > > For reference the declaration of TranscodeImage is > > class TranscodedImage { > public: > TranscodedImage(size_t size) : image(size) { } > > uint8_t* data() { return image.data(); } > size_t size() { return image.size(); } > > val get_typed_memory_view() { > return val(typed_memory_view(image.size(), image.data())); > } > > protected: > std::vector<uint8_t> image; > }; > > -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com > <mailto:emscripten-discuss+unsubscr...@googlegroups.com>. > To view this discussion visit > https://groups.google.com/d/msgid/emscripten-discuss/62902311-A081-4F3C-A2F1-389655F18E5E%40callow.im > > <https://groups.google.com/d/msgid/emscripten-discuss/62902311-A081-4F3C-A2F1-389655F18E5E%40callow.im?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/emscripten-discuss/1E5EADD3-6669-49A8-8B11-8EC752B5721B%40callow.im.
signature.asc
Description: Message signed with OpenPGP