Можно ли вызвать 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 доступна здесь.

Другие вопросы по тегам