Можно ли вызвать C++ из C#, скомпилированного в wasm?
Кто-нибудь знает, возможно ли в настоящее время вызывать C++ из C#, скомпилированного в wasm (или, точнее, для приложения Uno Platform)?
Я довольно новичок в WebAssembly, но мне удалось скомпилировать функцию C++ для wasm и вызвать ее из JavaScript. Я также получил проект быстрого запуска от Uno (который позволяет вам компилировать приложения UWP, написанные на C#/XAML для wasm и запускать их в браузере).
Я пишу и на C#, и на C++ ежедневно, но не могу понять, что такое "взаимодействие между двумя языками" + комбинация WebAssembly. Я предполагаю, что мне нужно скомпилировать код на обоих языках в 2 отдельных файла wasm и затем каким-то образом связать их вместе или загрузить C++ во время выполнения. То, что я хочу сделать, вообще возможно сегодня?
РЕДАКТИРОВАТЬ: Чтобы быть ясным: идея заключается в том, что весь код в конечном итоге скомпилирован в wasm.
1 ответ
P/Invoke поддерживается с прошлого месяца средой выполнения mono-wasm в двух режимах:
- Динамическое связывание произвольного модуля WebAssembly при работе с моно-интерпретатором
- Статическое связывание файлов битового кода LLVM, сгенерированных предыдущими вызовами emscripten, при работе под моно AOT
Последний прорабатывается в данный момент в Uno.Wasm.Bootstrapper в этом PR.
Он имеет точно такое же поведение, которое может иметь другая среда выполнения.NET, а это означает, что к C++ нельзя получить прямой доступ, и вам придется предоставить C API, чтобы иметь возможность его использовать.
Есть некоторые предостережения при использовании C++, когда среда выполнения должна быть принудительно включена в двоичные файлы среды выполнения mono, что делает ее больше. Это может скоро измениться, так как emscripten переходит на полноценную бэкэнд LLVM.
Некоторая документация для Uno.Wasm.Bootstrapper доступна здесь.