Можно ли вызвать C ++ из C #, скомпилированного в wasm? - PullRequest
6 голосов
/ 05 июня 2019

Кто-нибудь знает, возможно ли в настоящее время вызывать C ++ из C #, скомпилированного в wasm (или, точнее, для приложения Uno Platform)?

Я довольно новичок в WebAssembly, но мне удалось скомпилировать C ++Функция для wasm и вызвать его из JavaScript.Я также получил проект быстрого запуска от Uno (который позволяет вам компилировать приложения UWP, написанные на C # / XAML для wasm и запускать их в браузере), работающий.

Я пишу на C # и C ++ ежедневно,но что я не могу понять, так это «взаимодействие между двумя языками» + комбинация WebAssembly.Я предполагаю, что мне нужно скомпилировать код на обоих языках в 2 отдельных файла wasm и затем каким-то образом связать их вместе или загрузить C ++ во время выполнения.Возможно ли сегодня вообще то, что я хочу сделать?

РЕДАКТИРОВАТЬ: Для ясности: идея состоит в том, что весь код в конечном итоге скомпилирован в wasm.

1 Ответ

5 голосов
/ 05 июня 2019

P / Invoke поддерживается с прошлого месяца средой выполнения mono-wasm, используя два режима:

  • Динамическое связывание произвольного модуля WebAssembly при работе с моно-интерпретатором
  • Статическое связывание файлов битового кода LLVM, сгенерированных предыдущими вызовами emscripten, при работе под моно AOT

Последний работает в данный момент в Uno.Wasm.Bootstrapper в этом PR .

Он работает точно так же, как и во время выполнения .NET, что означает, что к C ++ нельзя получить прямой доступ, и вам придется предоставить API C, чтобы иметь возможность его использовать.

Существуют некоторые оговорки с использованием C ++, где среда выполнения должна быть принудительно включена в двоичные файлы моно среды выполнения, что делает ее больше. Это может скоро измениться, поскольку emscripten переходит на полный бэкэнд LLVM.

Некоторая документация для Uno.Wasm.Bootstrapper доступна здесь .

...