存档
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[]
老是要查头文件,又排得不整齐,排一份如下: 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 [...]
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); [...]
masm或ml.exe可以用alias造weak external symbol,这样可以起到链接时有就选用户提供的,无就选系统默认的这样一个功能。这个语法很简单,但不好找。以前找了又忘了,特记下: alias <sym2> = <sym1> 这次是在这里搜到的: http://rs1.szif.hu/~tomcat/win32/win32asm.txt
老生常谈了,网上很多文,我再多写一篇! 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 [...]
我的手机是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)等宏展开。 最后,我的程序修正了服务器数据识别,又可以使用了。 真是够折腾的。
今天看下属的代码才发现的,之前还真没碰到过。 #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 [...]
在 http://perldoc.perl.org/ 上可以看perl的文档。这自然是一件很好的事。 不过我还是比较习惯看chm的文档,比如我要找函数stat的说明,用网页方式的话我要打开浏览器,上到perldoc网站,定位到perlfunc那一页,再找到stat,这个时候可能是需要ctrl+f一下才找得到的,然后再转过去。有了chm文档,就方便了,打开后在index里输入stat回车即可看了。 5.8.8的就先不做了,一般也用不到这些差别。 在这里下载
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: [...]
一个很原始的需求是:做了一个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控件在不同网页里的表现不同而发现的。