Archive for the ‘技术’ Category

Debug

对调试目标进程是被其他进程拉起的时候很有效果,如IE、FireFox插件。

指向数组的指针

// [2][3][4]
 char (*p)[3][4]  = (char (*)[3][4])malloc(2 * 3 * 4);
 memset(p, 'a', 2 * 3 * 4);
 p[1][2][0] = 'b';
 p[1][2][1] = 'b';
 p[1][2][2] = 'b';
 p[1][2][3] = 'b';
 for(int i = 0; i < 2; ++i)
 {
  for(int j = 0; j < 3; ++j)
  {
   for(int x = 0; x < 4; ++x)
    printf("%c", p[i][j][x]);
  }
 }

老忘记,记录一下。为什么指向char [2][3][4]数组的指针不是char (*)[2][3][4]呢?想想指向一维数组的指针为什么不是char (*)[4]你就知道了,因为当你使用类似p[x][][]时,第一个[]定位p的位置!

Can we believe our eyes?

Can we believe our eyes?

批处理小记

reg add HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins /f

强制增加注册表项

set dllpath=%cd%\xxx.dll

设置一个dllpath变量,其中%cd%是表示bat所在目录路径的变量,%cd%\xxx.dll就直接字符串连接了。

reg add HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@xunlei.com/npXLSafeEdit /v Path /t REG_SZ /d "%dllpath%" /f

强制增加注册表值,/v是键,/t是键类型,/v是键值。

注意千万别把这个批处理命名为reg.bat,因为这样会造成运行reg.bat中的reg命令时以为是要调用reg.bat,会死循环。

编译npruntime

FireFox的plugin demo npruntime太难编译了,上次研究FireFox plugin时就没编译成功,这次总算编译成功了,记录下,避免忘记了又要折腾。

参考资料:
【原创】我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime
Compiling The npruntime Sample Plugin in Visual Studio

npruntime的源码我是取自mozilla-2.0的源码包,具体目录是:mozilla-2.0\modules\plugin\sdk\samples\npruntime
Gecko SDK即xulrunner-sdk,我下载的是最新的xulrunner-7.0.1.en-US.win32.sdk.zip,具体可以到https://developer.mozilla.org/en/Gecko_SDK下载。

按照上面两个参考资料的方法做大体是对的,这里编译出了两个问题。一个是printf未定义,在plugin.cpp的XP_WIN条件编译段加入#include <stdio.h>即可。另一个是由于npapi.h中有未知类型导致的大段错误,在npapi.h的#elif defined(XP_WIN)条件编译段加入#include <stddef.h>即可。

补充资料:Windows下的Firefox plugins开发的N个坑

无觅相关文章插件,快速提升流量