<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      換個方式用C#開發微信小程序

      ??前一陣子幫朋友開發個微信小程序,一開始使用Wechat Devtools開發,實在受不了轉用uniapp開發。后來突發奇想能否將C#寫的PixUI編譯成WebAssembly,由微信小程序加載運行。先上網搜了下小程序使用blazor的文章,都是用WebView包了一下blazor應用,沒有參考價值,還是自己動手實現吧。

      一、運行效果

      ??演示使用C#寫的LiveCharts,點擊按鈕動態生成一些數據。

      1. Android真機運行

      2. 模擬器運行

      二、實現原理

      ??原理比較簡單,如下圖所示,將C#寫的PixUI應用及C++寫的Skia引擎編譯為WebAssembly,然后通過微信小程序的WXWebAssembly加載,并在canvas(WebGL)通過skia繪制出用戶界面,監聽微信小程序的事件傳給C#處理后重新繪制界面。

      三、開發步驟

      1. 創建wasmconsole項目

      創建項目前請確認已經通過dotnet workload install安裝wasm-experimentalwasm-tools

      dotnet new wasmconsole
      

      2. 參考PixUI.Demo.Wasm.proj修改工程文件

      3. 使用PixUI開發用戶界面

      4. 編譯并分包

      因微信小程序包大小限制問題,使用PixUI.WxmpPkgs工具自動拆分生成pkgs目錄

      5. 將如圖所示的目錄及文件復制進PixUI.Demo.Wxmp/miniprogram/dotnet目錄內

      6. 修改dotnet.native.js

      因微信小程序的兼容問題,以及改動了dotnet的引導代碼暫需要手動修改emcc編譯生成的js。

      • 替換所有import.meta.urlglobalThis.bootUrl;
      • 搜索receiveInstace,將function receiveInstance(instance,module){wasmExports=instance.exports;替換為function receiveInstance(instance,module){wasmExports=instance.instance.exports;

      7. 用Wechat Devtools打開PixUI.Demo.Wxmp工程即可運行

      四、優勢與劣勢

      優勢

      • 代碼復用:前后端可以統一開發語言,;
      • 動態加載:可以遠程加載C#寫的PixUI組件;

      劣勢

      • 包太大: 因打包了dotnet的mono運行時及skia引擎,目前不包含中文字體總的包大小差不多8.8MB,小程序首次加載根據網絡情況會稍慢。

      五、IOS真機問題

      目前IOS真機上運行還有些問題,先在此記錄。

      1. WebAssembly不支持Exception Handling

      WXWebAssembly加載時會報invalid wasm file錯誤, 暫編譯不支持的版本繞過此問題。

      2. JSC引擎的Function.length始終返回0

      可以通過修改dotnet.runtime.js來繞過此問題, 搜索argument count mismatch for cwrap,將

      if(o&&n&&o.length!==n.length&&(Pe(`argument count mismatch for cwrap ${e}`),o=void 0),"function"!=typeof o&&(o=Xe.cwrap(e,t,n,r))
      

      替換為

      if("function"!=typeof o&&(o=Xe.cwrap(e,t,n,r))
      

      3. Jiterpreter造成微信閃退

      暫通過修改dotnet.runtime.js來繞過此問題,搜索.tableSize,將

      function(){if(ds)return;ds=!0;const e=ps(),t=e.tableSize,n=ot.emscriptenBuildOptions.runAOTCompilation?e.tableSize:1,
      

      替換為

      function(){return;if(ds)return;ds=!0;const e=ps(),t=e.tableSize,n=ot.emscriptenBuildOptions.runAOTCompilation?e.tableSize:1,
      

      4. 報compiling function underran the stack錯誤,暫無解。請哪位熟悉WebAssembly的大神指點一下

      六、小結

      ??本次嘗試換種方式用自己熟悉的語言來開發微信小程序,也為AppBox快速開發框架做個用戶端拓展實驗。感興趣的小伙伴可以直接clone https://github.com/enjoycode/PixUI.git ,用Wechat Devtools打開PixUI.Demo.Wxmp項目體驗。如果感興趣的小伙伴比較多,我會繼續完善(包括將微信小程序的一些api用C#包裝一下)。作者個人能力實在有限Bug在所難免,如有問題請郵件聯系或Github Issue,歡迎感興趣的小伙伴們加入共同完善,當然更歡迎贊助項目或給作者介紹工作(目前找工作中)。

      posted @ 2025-05-15 09:58  白菜園  閱讀(7019)  評論(17)    收藏  舉報
      主站蜘蛛池模板: 一本大道久久香蕉成人网| 黄色免费在线网址| 日韩精品视频一二三四区| 国产一级小视频| 精品一区二区久久久久久久网站| 欧美深度肠交惨叫| 岛国av无码免费无禁网站| 亚洲男女羞羞无遮挡久久丫| 国产探花在线精品一区二区| 国产精品人成视频免费国产| 国产日产欧产系列| 白嫩少妇无套内谢视频| 国产成人精品1024免费下载| 精品国产午夜肉伦伦影院| 土默特右旗| 国产91麻豆视频免费看| 伊人中文在线最新版天堂| 精品乱人码一区二区二区| 久久人人爽人人人人爽av| 日韩精品中文字幕一线不卡 | 建德市| 国产激情一区二区三区不卡| 深夜福利资源在线观看| 在线亚洲人成电影网站色www| 亚洲国产欧美在线人成AAAA| 日韩亚洲国产中文字幕欧美| 国产99精品成人午夜在线| 免费午夜无码片在线观看影院| AV人摸人人人澡人人超碰| 亚洲国产av区一区二| 亚洲人成网站在线观看播放不卡| 精品人妻伦九区久久69| 国产精品大片中文字幕| 无码福利写真片视频在线播放| 国内精品久久久久电影院| 一区二区三区午夜无码视频| 2019国产精品青青草原| 一区二区三区国产综合在线| 一区二区乱子伦在线播放| 亚洲另类激情专区小说图片| 欧美日韩综合网|