我正在尝试使用以下原型执行功能:
void pass_buffer(void** buffer_out, size_t* buffer_out_len, const void* buffer_in, size_t buffer_in_len);
所以想法是将一个缓冲区传递到 enclave,然后在另一个缓冲区中返回响应,该缓冲区的大小可以不同,该大小存储在buffer_out_len
.
我在定义 EDL 函数时遇到了麻烦。所以我的想法是做类似的事情:
public void pass_buffer([out]void** buffer_out, [out]size_t* buffer_out_len, [in, size = buffer_in_len]const void* buffer_in, size_t buffer_in_len);
现在,这只返回一个填充了一个的缓冲区。我知道我应该使用参数传递缓冲区的长度,但是不允许size
使用指针:size
public void pass_buffer([out, size = *buffer_out_len]void** buffer_out, [out]size_t* buffer_out_len, [in, size = buffer_in_len]const void* buffer_in, size_t buffer_in_len);
我的最后一个解决方案是否可以使用另一种语法?或者也许通过制作返回值size_t buffer_out_len
?如果是这样,我如何从size
参数中引用它[out]
?
或者也许有另一种方法来做这种行为?初始化一个可变大小的缓冲区并将其传递给外部?非常感谢。