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 的调用

?View Code JAVASCRIPT
1
2
var  argv = new Array("Just", "for", "test.");
obj.Run(argv.length, argv);

Tags:

近况…

Mozilla December 14th, 2006

前段时间忙着解决 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… 越往后面可扩展性越强, 但是就越来越平台相关了..

Tags: , ,