XPCOM array
Mozilla December 20th, 2006
记录下 XPCOM 的 array 的使用.
一个传入 string array 的例子:
1. IDL 的定义
1 | boolean Run(in PRUint32 count, [array, size_is(count)] in string args); |
2. CPP 的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | NS_IMETHODIMP nsAntlerIPC::Run(PRUint32 count, const char **args, PRBool *_retval) { char **child_argv = NULL; child_argv = (char **)nsMemory::Alloc(sizeof(char *) * (count + 1)); if (!child_argv) return NS_ERROR_OUT_OF_MEMORY; PRUint32 i; for (i=0; i<count; i++) { child_argv[i] = NS_CONST_CAST(char*, args[i]); } child_argv[count] = NULL; return NS_OK; } |
3. JS 的调用
1 2 | var argv = new Array("Just", "for", "test."); obj.Run(argv.length, argv); |
Tags: xpcom
前段时间忙着解决 Antler 里的 scintilla 在 Win32 下的按键绑定问题, 耗费了相当长的时间, 结果还是没搞定… ![]()
Mozilla 的 Plugin 在 Win32 平台下存在 focus 的问题, 所以捕获不到 WM_KEYDOWN 事件. 然后想了两个解决方法, 但都满足不了要求. 一个方法是在 WM_NOTIFY(这个能捕捉到) 里加入对按键的判断, 但是不灵敏… kick.. 另外一个是调用 SetFocus, 结果 WM_KEYDOWN 是能捕获了, 但是 scintilla 失去焦点后就没法输入了… 再次 kick…
这个问题只好往后放了… 反正 Linux 下是蛮正常的…
这周开始就开始考虑怎么整合 GCC 和 GDB 了. 着手于解决进程间通讯的问题, 大致思路是, 用 XPCOM 完成些进程通讯的接口, 然后用 JavaScript 封装个对结果进行解析及操作的类, 再反馈给视图. 嗯, 标准 MVC~
这几天做进程通讯的时候快被 PR_Read 弄疯了, 虽然说是阻塞读取, 但是用的时候返回值就没出现过 0, 也就是说没遇到过终止信号, 然后就一直卡在那里… 最后是通过 PR_Available 判断剩余数据字节数才搞定的…
PS: 发现 Antler 把几种 Mozilla 开发的几种基本形式都包含了… Extension, XPCOM, Plugin… 越往后面可扩展性越强, 但是就越来越平台相关了..