存档

‘开发’ 分类的存档

vs自带了一个mc.exe的程序,这个东西鲜有人知,它就是windows的message compiler程序。 mc编译mc代码,把它转变了一个bin格式的文件,放到资源中加载。在使用 windows event log , formatmessage的时候,就用得上这个消息了。formatmessage 有一个类似于 printf的形式的格式化能力。不过是用%1,%2这样的字眼,而不是%s,%d。这种%1,%2的形式理适合国际化。 codeproject上有一篇关于message compiler的文章:  http://www.codeproject.com/KB/system/mctutorial.aspx windows kernel有不少地方使用mc格式的文本。比如windows 在安装的时候,提示欢迎,格式化等的文字都来源于安装盘smss.exe的message resource里。 生成的 .bin 文件格式; binfile =  dword x + idgroups[x] + message[] idgroup = dword startid + dword endid  + dword offset_to_message message = dword sizeof(message) + char text[]

三 25th, 2010 | Filed under 开发

老是要查头文件,又排得不整齐,排一份如下: LONGLONG      llVal;        /* VT_I8                */ LONG          lVal;         /* VT_I4                */ BYTE          bVal;         /* VT_UI1               */ SHORT         iVal;         /* VT_I2                */ FLOAT         fltVal;       /* VT_R4                */ DOUBLE        dblVal;       /* VT_R8                */ VARIANT_BOOL  boolVal;      /* VT_BOOL              */ SCODE         scode;        /* VT_ERROR             */ CY            cyVal;        /* VT_CY                */ DATE          date;         /* VT_DATE              */ wireBSTR      bstrVal;      /* VT_BSTR              [...]

十 24th, 2009 | Filed under 开发

windows的透明窗口,如果设置了LWA_ALPHA和WS_EX_TRANSPARENT,就会连鼠标键盘事件也给透明过去,这个功能还不错。可以在屏上显示水印。 关键代码: SetWindowLong(m_hWnd, GWL_EXSTYLE, WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOPMOST);  SetLayeredWindowAttributes(m_hWnd, RGB(0,0,0), 120, LWA_ALPHA);  SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW); demo代码: static LRESULT WINAPI UIWndProcBase(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {  if (msg == WM_PAINT)  {   PAINTSTRUCT ps;   BeginPaint(hWnd, &ps);   //OnPaint(ps.hdc);   EndPaint(hWnd, &ps);  }  else if (msg == WM_DESTROY)  {   PostQuitMessage(0);  }  return DefWindowProc(hWnd, msg, wParam, lParam); [...]

八 1st, 2009 | Filed under 开发

masm或ml.exe可以用alias造weak external symbol,这样可以起到链接时有就选用户提供的,无就选系统默认的这样一个功能。这个语法很简单,但不好找。以前找了又忘了,特记下: alias <sym2> = <sym1> 这次是在这里搜到的: http://rs1.szif.hu/~tomcat/win32/win32asm.txt

四 24th, 2009 | Filed under 开发

老生常谈了,网上很多文,我再多写一篇! 1. my.cnf里加上: [client] default-character-set=utf8 [mysqld] default-character-set=utf8 重启mysqld,连上去看看: mysql> SHOW VARIABLES LIKE ‘%character%’;SHOW VARIABLES LIKE ‘collation%’; +————————–+—————————-+ | Variable_name            | Value                      | +————————–+—————————-+ | character_set_client     | utf8                       | | character_set_connection | utf8                       | | character_set_database   | utf8                       | | character_set_filesystem | binary                     | | character_set_results    | utf8                       | | character_set_server     | utf8                       | | character_set_system     [...]

四 15th, 2009 | Filed under 开发

我的手机是N72,唉,不先进。 去年给N72写了个软件,现在发现服务器升级用不了了。于是决定改一下。原来配软件花了好久好久,现在发现不太会配了,又折腾了好久才搞定,赶快把过程记下来: 安装j2re-1_4_2_16-windows-i586-p.exe,不能装新版的或旧版的。//shit 安装WinPcap_3_1.exe,不能装新版的或旧版的。//shit 2. 安装ActivePerl-5.6.1.635-MSWin32-x86,不能装新版的或旧版的。//shit 3. 安装carbide.c++_v1.2.exe。(download from nokia) 安装s60_2nd_sdk_fp3(其它版本不能用于N72) 都装完了后,模拟器可以运行了。但是还是不能上网。记得去年折腾了好多天才搞定,现在总结只要两步走: 首先,在模拟器选项里设好IP,子网掩网,网关,DNS等信息。 然后,关掉模拟器,运行两条命令: C:\Symbian\8.1a\S60_2nd_FP3\Epoc32\Data>set EPOCROOT=\Symbian\8.1a\S60_2nd_FP3\ C:\Symbian\8.1a\S60_2nd_FP3\Epoc32\Data>perl ../tools/configchange.pl –config ethernetWithCommDB –kernel EKA1 –target winscw –variant UDEB 就可以了,注意第二条命令运行的目录不能错。 这样就可以上网了,用慢得像坨屎的carbide c++开发吧。另外这个s60_2nd_sdk_fp3还有几个大BUG,又是一坨屎啊。 最后,发现carbide用bld.inf文件导入的文件,不会生成.sis文件,又折腾了我好久才搞定!!方法,自己去修改pkg文件,然后手动调用makesis.exe,没啥别的办法。创建的工程carbide是会给生成.sis的,一旦把这个工程移除后再导入,就怎么也不会生成sis了,再一次说:shit! 生成sis文件命令: C:\Symbian\8.1a\S60_2nd_FP3\Epoc32\tools\makesis.exe  myproj__.pkg output.sis -v 其中myproj__.pkg是从myproj.pkg改来,手动把其中的$(EPOCROOT)等宏展开。   最后,我的程序修正了服务器数据识别,又可以使用了。 真是够折腾的。

六 5th, 2008 | Filed under 开发

今天看下属的代码才发现的,之前还真没碰到过。   #include <stdio.h> int main() {         for (int i=0; i<10; ++i)         {                 for (int i=0; i<10; ++i)                 {                         ;                 }                 int x = i;         }         return 0; } gcc编译:   debian:~$ gcc t.cc t.cc: In function ‘int main()’: t.cc:10: warning: name lookup of ‘i’ changed [...]

五 10th, 2008 | Filed under 开发

在 http://perldoc.perl.org/ 上可以看perl的文档。这自然是一件很好的事。 不过我还是比较习惯看chm的文档,比如我要找函数stat的说明,用网页方式的话我要打开浏览器,上到perldoc网站,定位到perlfunc那一页,再找到stat,这个时候可能是需要ctrl+f一下才找得到的,然后再转过去。有了chm文档,就方便了,打开后在index里输入stat回车即可看了。 5.8.8的就先不做了,一般也用不到这些差别。 在这里下载  

四 27th, 2008 | Filed under 开发, 软件

  use utf8; my $var="测试啊";   print "OK1\n" if ($var=~/试/);   printf "str: %s length: %d\n", $var, length($var);   $var = `echo $var`; chomp($var);   print "OK2\n" if ($var=~/试/);   printf "str: %s length: %d\n", $var, length($var); 结果:   debian:~# ./test.pl  OK1 Wide character in print at ./test.pl line 11. str: 测试啊 length: 3 str: [...]

四 26th, 2008 | Filed under 开发

一个很原始的需求是:做了一个activex对象,只希望它在某些站点中使用。不希望在其它站点中使用。 或者说,不希望被别的人偷用。或者不希望被广泛使用而造成安全问题。 比如:在www.foo.com中可以使用,在www.bar.com中不能使用。 由于只有ie能创建并访问activeX,因此本文只适用于IE。 要解决这个问题,关键是两点: 如何在activex对象中判定当前域名或当前所在网页url。 如何在判定不能使用后,禁止用户使用。 对于2,应该是简单的,不能使用后,所有的接口都返回E_FAIL即可。当然,这里有更好的策略,还可以通知到用户。 对于1,我以前一直没有找到办法,虽然办法很简单。无非是实现一下IObjectWithSite,这样IE在创建activex的时候会把site传给创建的activex,这样就容易取得当前url了:   HRESULT CMyActiveX::SetSite(IN IUnknown *pUnkSite) {   CComQIPtr<IServiceProvider> spsp = pUnkSite; pUnkSite->QueryInterface(&m_WebBrowser2);   m_WebBrowser2->get_LocationURL(&m_bsUrl);   //more..   } 对于2,通知到用户的办法是,实现IObjectSafety,然后,在GetInterfaceSafetyOptions和SetInterfaceSafetyOptions中,根据当前情况返回E_FAIL就行了。 以上内容是是研究微软的某软件的一个activex控件在不同网页里的表现不同而发现的。

四 22nd, 2008 | Filed under 开发