Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储基于C的本机客户端实例的用户数据_C_Google Chrome_Google Nativeclient - Fatal编程技术网

存储基于C的本机客户端实例的用户数据

存储基于C的本机客户端实例的用户数据,c,google-chrome,google-nativeclient,C,Google Chrome,Google Nativeclient,我一直在为Google Chrome开发基于C的本机客户端模块。NaCl系统调用的许多模块函数都有一个PP_Instance参数,该参数唯一标识模块实例 我的问题:是否有任何方法将用户数据与此实例句柄关联 C API指定它是一个不透明句柄。它不提供将用户数据链接到句柄的函数。现在,我必须在模块中使用一组全局变量来共享函数之间的状态。这似乎不是正确的解决方案。我不确定是否会有多个实例共享该流程空间,但我这里不做任何假设 我想我可以实现某种查找表,将实例映射到恰好位于全局范围内的唯一上下文。但对于基

我一直在为Google Chrome开发基于C的本机客户端模块。NaCl系统调用的许多模块函数都有一个PP_Instance参数,该参数唯一标识模块实例

我的问题:是否有任何方法将用户数据与此实例句柄关联

C API指定它是一个不透明句柄。它不提供将用户数据链接到句柄的函数。现在,我必须在模块中使用一组全局变量来共享函数之间的状态。这似乎不是正确的解决方案。我不确定是否会有多个实例共享该流程空间,但我这里不做任何假设


我想我可以实现某种查找表,将实例映射到恰好位于全局范围内的唯一上下文。但对于基于C的API来说,这似乎也是不必要的。C++ API通过它的类避免了这一点。

pp.实例应该被用作查找与插件实例关联的状态/对象的键。例如,当包含框架中存在多个嵌入标记时,可以根据API在模块中实例化多个插件实例。目前Pepper的NaCl实现并没有做到这一点,而是创建了多个进程,每个进程包含一个模块,每个模块实例化一个Pepper插件实例。然而,这是一个可能会发生变化的实现细节(或者可能是bug?),最好是防御性编程并能够处理多个DidCreate事件

当然,如果您的NaCl模块保证不会被其他任何人使用,并且您知道不会有同一个模块的两个嵌入,那么假设单例实例并使用全局状态是可以的,但是以“正确”的方式做事情并不难,那么为什么不呢


有关此主题的更多讨论,请参阅。

我的经验是使用基于C的API传递不透明句柄,“正确”的方法是允许应用程序附加指向用户数据的指针,各个函数可以分离这些数据。但我很高兴得到一个明确的答案,即这不是C-NaCl中的工作方式。我将相应地重构我的代码。谢谢