相关疑难解决方法(0)

如何从WebAssembly函数返回JavaScript字符串

如何从WebAssembly函数返回JavaScript字符串?

以下模块可以用C(++)编写吗?

export function foo() {
  return 'Hello World!';
}
Run Code Online (Sandbox Code Playgroud)

另外:我可以将它传递给JS引擎进行垃圾回收吗?

javascript webassembly

32
推荐指数
3
解决办法
1万
查看次数

如何处理传递/返回emscripten编译代码的数组指针?

我是Emscripten/javascript以及Overstack社区的新手.如果我的情况已经得到解决,我会事先道歉.

在Windows 7环境中,我使用emcc编译了一个简单的c程序,它接受一个数组并对其进行修改(见下文).

double* displayArray(double *doubleVector) {

   for (int cnt = 0; cnt < 3; cnt++) 
       printf("doubleVector[%d] = %f\n", cnt, doubleVector[cnt]);

   doubleVector[0] = 98;
   doubleVector[1] = 99;
   doubleVector[2] = 100;

   for (int cnt1 = 0; cnt1 < 3; cnt1++) 
       printf("modified doubleVector[%d] = %f\n", cnt1, doubleVector[cnt1]);

   return doubleVector;
}

int main() {

   double d1, d2, d3;
   double array1[3];
   double *array2;

   array1[0] = 1.00000;
   array1[1] = 2.000000;
   array1[2] = 3.000000;

   array2 = displayArray(array1);

   for (int cntr =0; cntr < 3; cntr++)
       printf("array1[%d] …
Run Code Online (Sandbox Code Playgroud)

javascript emscripten

30
推荐指数
2
解决办法
9293
查看次数

使用 emscripten 将数组传递给 C 函数

我认为这个问题与这个问题类似,我使用了它的大部分答案来解决我的问题,但我仍然有问题:

首先是C代码:

#include <stdio.h>

extern "C"
{
    void fillArray(int* a, int len)
    {
        for (int i = 0; i<len; i++)
        {
            a[i] = i*i;
        }

        for (int j = 0; j < len; ++j)
        {
            printf("a[%d] = %d\n", j, a[j]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我将一个指向数组的指针传递给我的 C 函数,并用一些信息填充它。我用以下代码编译这段代码

emcc -o writebmp.js dummyCode\cwrapCall.cxx -s EXPORTED_FUNCTIONS="['_fillArray']"
Run Code Online (Sandbox Code Playgroud)

我的 html/js 代码如下:

<!doctype html>
<html>
  <script src="writebmp.js"></script>
  <script>
    fillArray = Module.cwrap('fillArray', null, ['number', 'number']);
    var nByte = 4
    var length = 20;
    var buffer = Module._malloc(length*nByte); …
Run Code Online (Sandbox Code Playgroud)

c arrays emscripten

7
推荐指数
1
解决办法
4727
查看次数

将客户端文件从前端传递到Webassembly

我希望将用户提交的数据传递给已编译为wasm的c ++函数。数据是用户通过输入标签在前端提交的文件,如下所示:

<input type="file" onChange={this.handleFile.bind(this)} />
Run Code Online (Sandbox Code Playgroud)

当前的onChange回调如下所示:

handleFile(e){
    const file = e.currentTarget.files[0];
    const reader = new FileReader();
    reader.onloadend = evt => {
        window.Module.readFile(evt.target.result);
    }
    reader.readAsArrayBuffer(file);
}
Run Code Online (Sandbox Code Playgroud)

最后,包含readFile函数的.cpp文件如下所示:

void readFile(const std::string & rawString){
  std::vector<uint8_t> data(rawString.begin(), rawString.end());
  //...
}

EMSCRIPTEN_BINDINGS(my_module) {
  emscripten::function("readFile", &readFile);
}
Run Code Online (Sandbox Code Playgroud)

我花了一个下午的时间阅读各种文档,因此我知道应该为堆上的这些文件分配内存,然后将ptr从js传递到readFile而不是传递所有数据。我的问题是,我只是不太了解所有这些工作原理。有人可以解释吗?

html javascript c++ webassembly

5
推荐指数
2
解决办法
1941
查看次数

标签 统计

javascript ×3

emscripten ×2

webassembly ×2

arrays ×1

c ×1

c++ ×1

html ×1