自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (7)
  • 论坛 (9)
  • 收藏
  • 关注

原创 colortail,让 tail 命令绚丽起来

<br />colorgcc, colormake, man, vim 等的彩色可能很多人都知道了,今天介绍  colortail,让 tail 命令也多彩起来。<br />colortail 下载地址<br />http://joakimandersson.se/projects/colortail/<br />下载后 configure, make, make check, make install 就可以使用<br />除了用 -k 选项指定色彩配置文件外,跟 tail 命令都一样。<br /> 

2010-10-20 14:23:00 1457

原创 让 less 显示 ANSI 控制字符

<br />为了醒目,我们常把信息比如日志以彩色输出到终端,这会用到 ANSI 彩色控制字符。<br />通常输出到文件的时候,为了分析或者查看方便(很多工具不识别),则往往不输出彩色。<br /> <br />其实输出彩色还是有些工具能查看的,比如 cat 就可以,还有就是 less 也是可以的,用 -R 选项即可:<br /> <br />       -R or --RAW-CONTROL-CHARS<br />              Like -r, but only ANSI "color

2010-10-12 11:08:00 714

原创 在 Windows 上通过 SSH 协议挂载远程文件系统

linux 用户应该都知道 fuse 和 sshfs 这两个东西,fuse 方便以用户模式开发文件系统,而 sshfs 则是其应用,用来把远程的 ssh 主机 mount 到本地文件系统。不要只羡慕 Linux 用户,Windows 用户也有福音了,那就是Dokan 及其SSHFS。http://dokan-dev.net/en/download/还有一个类似的商业软件,叫 ExpanDrive,http://www.expandrive.com/windows/,感觉更好用一些。使用 sshfs 最大的好

2010-10-09 16:21:00 2784

原创 用 sscanf 解析字符串时结尾的判断

常用 sscanf 解析字符串,处理错误也很简单:sscanf 会返回实际解析并赋值了的域的个数,判断一下是否和期望的一致即可。今天却遭遇一个解析地址的 bug,是由于地址本应该是“127.0.0.1:30000”被写成 “127.0.0.1:30000:127.0.0.1:30000”,原来用 sscanf 解析,判断结果等于5就认为正确,却没有判断额外的字符。修正:    bool Assign(const char* src)    {        unsigned int b1, b2,

2010-07-31 18:49:00 3023

原创 用 proxychains 做透明代理

有时候需要连接某机器,但是直接连被屏蔽了,虽然可以用代理来搞定一些应用程序,但是很多程序不支持代理,或者只支持某些类型的代理,这时候就可以试一试 proxychains 这个软件了。比如:svn 只支持 HTTP 代理,不支持 socks4 代理,svn+ssh 方式也挺麻烦的,可以用一个 socks 转 HTTP 代理软件的,需要在 ~/.subversion/servers 利配置,用 proxychains 这个东西就更方便。proxychains 用起来就像 time, strace, ccache

2010-07-29 22:02:00 9370

原创 万恶的夏令时

<br />帮人调试一段代码,及其慢的代码,经调试发现是因为这个没有初始化造成的。<br />这个成员成员对性能影响极大,设置与不设置,性能差了一万倍。设置为 >0 的值时,会多做相当多的额外的复杂的操作。<br />万恶的夏令时。想节约能源,调整一下作息时间就是了,居然调整时间,这种做法跟我以前怕迟到把表拨快5分钟一样山寨。

2010-07-29 20:15:00 549

原创 服务器程序不要用 select 函数,可能会因越界而崩溃

<br />select 效率问题大家都知道,但是 select 正确性问题,很少有人讨论,特地点出来。<br />linux 下 fd_set 是个 1024 位的位图,每个位代表一个 fd 的值,这也是效率低的原因。<br />性能问题且不提,正确性问题则更值得重视。<br /><br />因为这是一个 1024 位的位图,因此当进程内的 fd 值 >= 1024 时,就会越界,可能会造成崩溃。对于服务器程序,fd >= 1024 很容易达到,只要连接数 + 打开的文件数足够大即

2010-07-23 00:55:00 1092

原创 让 flock 支持多个命令外部和内部命令的方法

让 flock 支持多个命令外部和内部命令的方法flock 是个外部,只支持外部命令,且不支持多个命令。这样就可以了# 把要执行的命令序列写成函数$ function xxxx() { sleep 3; echo xxxx; }# 导出给子进程$ export -f xxxx# OK 了$ flock a.cpp /bin/bash /dev/stdin 类似的方法可以推广到其他能执行命令的外部命令,比如 /usr/bin/time

2010-07-01 12:39:00 557

原创 实测多线程并发对随机读取的性能提升

<br />机器是4core, 单cpu,文件大小 15GiB,分成 N 个线程共随机读取一万次,SUSE10, Linux 2.6.16 内核<br />初始机器负载基本为空,线程个数与耗时的关系如下:<br /><br />线程个数 耗时<br />0        31.3s<br />1        31.3s<br />2        25.5s<br />4        20.2s<br />8        16.5s<br />12       15.0

2010-07-01 12:38:00 456

原创 自动设置 vim 的终端编码

<br />vim 用 termencoding 选项控制输出时的编码,这个选项默认为空,也就是不进行转换,<br />这导致我在 GB 编码的终端下打开 UTF-8 文件,虽然能识别出来,显示却是乱码。<br />设置终端编码当然可以,不过还是要相应设置 locale,比较麻烦。<br /><br />通常终端编码和 LOCALE 的设置一致,因此可以借用一下这个设置:<br /><br />let &termencoding = substitute($LC_ALL, "[a-zA-Z_

2010-07-01 12:33:00 636

原创 检查 Linux 下线程库的类型

linux 下有 linuxthreads 和 NPTL,nptl 比 linuxthreads 先进,目前新内核都支持 ntpl,相应的 glibc 也支持,遇到老的机器,用的还是 linuxthreads,虽然二者二进制兼容,但是某些细节上还是不同,问题现实存在,无奈也得解决。方法是用 confstr 来读取系统的配置信息:#include static bool CheckNptl(){    char buf[32];    confstr(_CS_GNU_LIBPTHREAD_VERSIO

2010-07-01 12:30:00 953

原创 gcc 下获得程序名

Windows 上我们可以用 GetMuduleName 获得可执行文件的名字。Linux 下应该是 /proc/self/exe,如果只需要获得大概的名字用作帮助信息和诊断报告等,可以用 program_invocation_name 或者 program_invocation_short_name 。program_invocation_name 是进程被命令行启动时调用的名字,也就是 argv[0]。program_invocation_short_name 是program_in

2010-07-01 12:21:00 2416

原创 写了个 C++ 名字的 demangle 函数

<br />当然不是自己解码的,不过有神人这么做:<br />http://hi.baidu.com/avengine/blog/item/9b7147a94c78c4fc1e17a2f7.html<br /><br />还有这个<br />http://sourceforge.net/projects/php-ms-demangle/<br />是抄的 wine 的。<br /><br />搞这个是为了解决 gcc typeinfo::name 返回的不是原始名字的问题。<br /><

2010-06-29 14:06:00 890 1

原创 用猥琐的方式解决了 glibc 版本兼容

<br />2.6内核下编译的程序,放到2.4内核下运行不了。找不到 __stack_chk_fail@@GLIBC_2.4<br />因为老机器上的 glibc 版本是 2.3.4,于是猥琐地解决了这个问题:<br /><br />extern "C" void dummp_stack_chk_fail(){}<br />__asm__(".symver dummp_stack_chk_fail, __stack_chk_fail@@GLIBC_2.4");<br />这样

2010-06-29 14:04:00 1795

原创 以后在这里写技术 blog 好了

<br />livespace 被 Shielded很久,懒得翻墙,悲剧。

2010-06-29 14:02:00 557 1

原创 用 LD_PRELOAD 挽救被误删的 libc.so.6

用 LD_PRELOAD 挽救被误删的 libc.so.6libc.so.6 的符号链接被同事误删,。libc.so.6,不仅包含了普通的 C 运行库,还包含了系统调用的封装。就像 Windows 系统上的 kernel32.dll 一样重要。被误删后,几乎所有新的进程都起不来,因为几乎所有的程序都依赖 libc.so.6。因此 scp, cz, cp, ln 统统不管用。用写一个这样的文件或许有效。$ cat /usr/lib/libc.so/* GNU ld script   U

2010-06-29 13:56:00 1900

原创 NDIS简介

to be done

2005-09-10 07:55:00 1056

原创 通过使用类型库提高VB调用DLL函数的性能

  本文始发于水木清华BBS(smth.org),转载请保留有关信息,谢谢! 通过使用类型库提高VB调用DLL函数的性能RoachCock@smth mailto:chen3feng@163.com, chen3fengx@163.com, chen3fengx@hotmail.com   VB虽然是个很好玩的东西,但是自身功能有限,限制了VB在某些方面的应用. MS提供了两种两种方式来增

2003-01-16 08:53:00 1900

原创 利用动态创建自动化接口实现VB的函数指针调用

发信人: RoachCock (chen3feng), 信区: MicrosoftTRD 标  题: 我的 VB的函数指针调用 发信站: BBS 水木清华站 (Fri Jan  3 14:54:25 2003), 转信   本文首发于水木清华BBS MicrosoftTRD版,转载请保留有关信息   作者chen3feng(RoachCock@smth.org) email: chen3feng@

2003-01-06 10:01:00 2063

原创 定长字符串模板类

本文始发于水木清华BBS,转载请保留作者信息,谢谢Auther: chen3feng (RoachCock@smth)email:  chen3feng@163.com  mailto:chen3fengx@163.com  chen3feng@hotmail.com 发信人: RoachCock (chen3feng), 信区: CPlusPlus 标  题: [代码]定长字符串模板

2002-11-02 00:06:00 3449

原创 cfc::array,一个多维数组类

发信人: RoachCock (chen3feng), 信区: Programming 标  题: cfc::array,一个多维数组类 发信站: BBS 水木清华站 (Wed May 29 10:46:42 2002) cfc::array boost提供了boost::array,但是那只是一维的数组,我实现的这个支持一维,二维和三   维数组,三维以上的没有支持,我想你大概也不大会用到吧

2002-10-08 09:22:00 1221

原创 在VBS中使用事件

发信人: RoachCock (chen3feng), 信区: Programming 标  题: 在VBS中使用事件 发信站: BBS 水木清华站 (Thu Jun 13 18:55:43 2002)   VBS是一种功能强大的语言,这个从各种宏病毒的泛滥可以看得出,VBS功能强大不是语言 本身,而是它具有调用自动化COM组件的能力,而且,在VBS中还可以使用事件 VBS提供了一个GetRef函

2002-09-30 10:37:00 2322

原创 .net中的 delegate的标准C++模拟

发信人: RoachCock (穷鬼), 信区: Programming 标  题: .net中的 delegate的标准C++模拟 发信站: BBS 水木清华站 (Mon Mar 18 21:11:30 2002) 用模板的偏特化和成员模板,重载函数调用运算符成功的实现了delegate,既可以绑定普通函数,也可以绑定对象及其成员函数在cygnuwin下编译通过, 还不支持一个delegat

2002-04-01 09:29:00 957

Facebook C++基础库Folly里的Futures库简介

Folly是Facebook的开源C++基础库,其中的Futures库为简化异步调用代码提供了方便。

2018-07-11

定长字符串模板类

I.引言 在Basic(俺的入门语言),Pascal等语言中都提供了定长字符串类型,各有特色,Basic的 是长度固定,超出截断,不足补空格;;pascal的是最大长度限制在某个范围. 虽然定长字符串有这样那样的缺点(例如长度有限,弄不好会丢失数据;;) 定长字符串还是有一定的好处,主要是: 1.不分配在堆上,从而不会造成内存碎片 2.静态分配内存,分配速度快 因此我写了一个定长字符串类,用作轻量级的字符串.类似于pascal的定长字符串,也采用也采取饱和的方式来处理溢出. II.简介 主要类有: 1. template&lt;;typename T,typename Traits=std::char_traits&lt;;T&gt;; &gt;; class basic_small_string_base;; 这是定长字符串的基类,适用于各种字符类型,当然也支持&quot;;火星人的三字节字符&quot;;. 模板类的代码主要实现在该类中.该类是抽象类,不能够实例化. 2. template&lt;;typename T, size_t MaxSize, typename Traits=std::char_traits&lt;;T&gt;; &gt;; class basic_small_string;; // : public basic_small_string_base&lt;;T,Traits&gt;; 特定长度的定长字符串模板类.如果C++标准支持模板typedef的话,下面的4的俩类就不用再写了,遗憾的是还不支持,所以他也是抽象类.//其实做成可实例化的类也没任何问题。 3. typedef basic_small_string_base&lt;;char, std::char_traits&lt;;char&gt;; &gt;; small_string_base;; typedef basic_small_string_base&lt;;wchar_t, std::char_traits&lt;;wchar_t&gt;; &gt;; small_wstring_base;; 针对char和wchar_t(我特讨厌这后面的_t这根尾巴)两种字符类型的基类的和默认traits 的typedef.写函数参数类型的时候可以少写几个字, ^=^ 4. template &lt;;size_t MaxSize, typename Traits=std::char_traits&lt;;char&gt;; &gt;; class small_string;; // : public basic_small_string&lt;;char, MaxSize,Traits&gt;; 这是定长字符串的基类,适用于各种字符类型,当然也支持&quot;;火星人的三字节字符&quot;;. 模板类的代码主要实现在该类中.该类是抽象类,不能够实例化. 2. template&lt;;typename T, size_t MaxSize, typename Traits=std::char_traits&lt;;T&gt;; &gt;; class basic_small_string;; // : public basic_small_string_base&lt;;T,Traits&gt;; 特定长度的定长字符串模板类.如果C++标准支持模板typedef的话,下面的4的俩类就不用 再写了,遗憾的是还不支持,所以他也是抽象类.//其实做成可实例化的类也没任何问题。 3. typedef basic_small_string_base&lt;;char, std::char_traits&lt;;char&gt;; &gt;; small_string_base;; typedef basic_small_string_base&lt;;wchar_t, std::char_traits&lt;;wchar_t&gt;; &gt;; small_wstring_base;; 针对char和wchar_t(我特讨厌这后面的_t这根尾巴)两种字符类型的基类的和默认traits 的typedef.写函数参数类型的时候可以少写几个字, ^=^ 4. template &lt;;size_t MaxSize, typename Traits=std::char_traits&lt;;char&gt;; &gt;; class small_string;; // : public basic_small_string&lt;;char, MaxSize,Traits&gt;; template &lt;;size_t MaxSize, typename Traits=std::char_traits&lt;;wchar_t&gt;; &gt;; class small_wstring;; // : public basic_small_string&lt;;char, MaxSize, Traits&gt;; 真正能实例化的ANSI和WCHAR版本的定长字符串类. III.用法 该模板类用法和std::string一样,可以参考它的文档.另外为了兼容std::basic_string&lt;;&gt;;, 还提供了和std::string搭配的一些额外功能,比如函数的字符串参数都支持 std::basic_string.可以与std::basic_string&lt;;&gt;;进行比较,转换,连接等. 1. 包含头文件 #include&quot;;small_string.hpp&quot;; 2.引入cfc命名空间 using namespace;; // 可以略去 3.实例化对象 cfc::small_string&lt;;16&gt;; s=&quot;;hello&quot;;;; // 一个缓冲区长度为16的定长字符串,内容为&quot;;hello&quot;; // 最大长度为15,而不是16,注意! 作局部变量时效率上基本上等于 char s[]=&quot;;hello&quot;;;;低于char *s=&quot;;hello&quot;;;;原因很简单. 可以和std::string协同操作: std::string s3 = s;; s = s3;; 4.作为函数参数 作为非模板函数的参数传递时,参数的类型应该写成cfc::small_string_base&或者 cfc::small_wstring_base& ,根据需要,可以加上const: void foo(cfc::small_string_base& str) { str=&quot;;hello&quot;;;; } int main() { cfc::small_string&lt;;32&gt;; s;; foo(s);; } 其他插入,比较,删除等操作跟std::string一样 IV.实现 利用模板的最大缓冲区长度参数,实例化模板,把缓冲区作为数组直接建立在对象的内部. 为了减少代码膨胀,大部分功能都移入基类. V.结尾. 由于时间仓促,经历有限,经验不足,缺点错误肯定不少,欢迎大家批评指正. 谢谢!

2006-03-16

一组新的多维数组模板类

一组新的多维数组模板类 by chen3feng(RoachCock@smth) email: chen3feng@163.com, chen3fengx@163.com, chen3fengx@hotmail.com [引言] 在C/C++开发中,多维数组是一个让很多人感到棘手的问题.原因是C/C++中,多维数组被看 作是数组的数组. 在向函数传递参数的时候,多维数组经常让人感到是麻烦的制造者,通常都是传递首地址 和每一维的大小: void foo(int *,int ,int);; int a[10][10];; foo(&a[0][0],10,10);; //... 十分的麻烦,在函数中访问时也得自己用乘法来计算元素的位置,更是十分麻烦. C99标准推出了可变大小的多维数组,当然,实现该标准的编译器还不多,但是也从一个方 面说明了变量大小的多维数组是很有用的. C++标准直到现在还不支持,明年(2003年)的新标准也不知道会不会加进去.但是C++程序 员自己有办法,利用C++的模板,运算符重载等技巧,完全可以构建出方便实用的多维数组类 我抢在明年之前做出这组模板类,也希望即使新标准增加了变量大小的多维数组,我的工 作也仍有一些意义, :) 另外,多维数组的空间是连续的,这跟用vector of vector实现的不一样,可以用迭代器 从头到脚挨个摸一遍. boost库也提供了多维数组类,当然还有别的几个数组类.我感觉boost多维数组类的缺点 就是只支持动态数组,对静态和动态数组没有一个统一的非GP的接口,因此我着重于这方 面的改进, [简介] 该组类有以下几个类模板组成 1. template &lt;;typename T, size_t DimNum&gt;; class array_base;; 该类是其他几个数组类的基类 // 由于编译器对C++标准实现参差不齐的原因,该类实际 上不是根类,不过应用中不需要知道这一点. 提供了基本的功能,比如[]运算符,迭代器的类型声明,迭代器的获取,value_type等的定 义等 等 2. template &lt;;typename T, size_t d1, size_t d2 = -1, size_t d3 = -1&gt;; class static_array;; 静态的数组类,从array_base派生而来,因此除了兼容也是由array_base派生出来的其他 类外,还有自己的特点,就是提供了一个elements的public成员,直接暴露给用户,访问 速度可以很快. 3. template&lt;;typename T,size_t DimNum, typename A=std::allocator&lt;;T&gt;; &gt;; class dynamic_array;; //:public array_base&lt;;T, DimNum&gt;; 看得出也是从array_base派生的,另外,他是可以resize的.还支持reserve等STL容器的操 作. 4. template &lt;;typename T, size_t DimNum, typename A=std::allocator&lt;;T&gt;; &gt;; class shared_array;; //: public array_base&lt;;T, DimNum&gt;; 就是支持引用计数的动态数组啦.不过刚写了个外皮,内容还没开工,因为我最近要回家. sorry! [用法] 先要包含各自的头文件: #include &quot;;static_array.hpp&quot;; #include &quot;;dynamic_array.hpp&quot;; #include &quot;;shared_array.hpp&quot;; 1.然后就可以定义对象 cfc::static_array&lt;;int,10&gt;; sa1;; cfc::static_array&lt;;int,10, 10&gt;; sa2;; cfc::static_array&lt;;int,10, 10, 10&gt;; sa3;; cfc::dynamic_array&lt;;int, 1&gt;; da1(cfc::extents[10],10);; cfc::dynamic_array&lt;;int, 2&gt;; da2(cfc::extents[10][10], 10);; cfc::dynamic_array&lt;;int, 3&gt;; da3(cfc::extents[10][10][10], 10);; cfc::shared_array&lt;;int,1&gt;; sha1(cfc::extents[10]]);; cfc::shared_array&lt;;int,2&gt;; sha2(cfc::extents[10][10]);; cfc::shared_array&lt;;int,3&gt;; sha3(cfc::extents[10][10][10]);; extents是一个数组的维度生成器,用起来的很方便,跟boost学的,不过没仔细看它的实现 ,我觉得我的也不错,哈哈 2.访问元素: sa1[0] = 0;; da1[0] = 0;; sa2[0][0] = 0;; da2[0][0] = 0;; sa3[0][0][0] = 0;; da3[0][0][0] = 0;; 3.比较相等与否: bool f;; f = sa1==sb1;; f = da1==da1;; f = sa1==da1;; // 说明:只提供了==和!=,别的没提供,我觉得别的意义大 4.交换: cfc::swap(da1,db1);; cfc::swap(sa1,sb1);; cfc::swap(sa1,db1);; //说明:动态数组的交换很高效,换个指针而已, :) 5.resize: da3.resize(cfc::extents[10][100][1]);; da3.resize(cfc::extents[10][50][1]);; da3.resize(cfc::extents[10][10][20]);; da3.resize(cfc::extents[10][10][10]);; //说明:只有动态数组才能resize, 还有将来的shared_array, zz 6.赋值: da3 = db3;; sa1 = sb1;; da1 = db1;; 静态数组维度不一样不能赋值,否则会引起编译错误 动态数组和丢失了静态大小成为了array_base的数组维度不一样时,赋值引发 std::length_error异常,可以捕捉到, 比较也是这样 7.作为函数的参数 还举开头的那个例子 void foo(array_base&lt;;int,2&gt;; &a) { a[0][0]=10;; } 8.重要概念 &lt;;子数组&gt;; 高维数组的子类型,也就是低一维的数组. 子数组的类型为array_base,支持array_base的所有操作,但是不再支持原来数组的特定 操作子数组由[]运算符得到, sa3[0] da3[0] //类型均为array_base&lt;;int,2&gt;; 子数组还可以在取子数组 da3[0][1];;//类型为array_base&lt;;int,1&gt;; [性能] 三维大小均为100的静态,动态,原生数组以及boost::multi_array.以三重循环每次隔一个 填充, 我测试的结果,速度大概是原生数组的60%,boost数组的速度是原生数组的1/5,因此速度 大概是boost的3倍. 如果用迭代器顺序访问的话,跟原生数组相比就区别不大了.但是代码要好写一点,而且直 接支持STL算法. [实现与移植] 由于要兼顾各种编译器,而且是在VC6上做的,因此像模板偏特化等特性都不能用,需要变 通,因此相当繁琐,由此可见一个好的编译器多么重要啊. 不过话说回来,这样的代码移植性才好呢.想想连VC6都能编译的代码,移植性应该不错, :) [后记] 这是对以前的那个多维数组类的扩充与改进,增加了不少功能,去掉了不少限制, 现在静态数组的最大维数做到了3,动态数组的维数不限//你需要多高维数的?维数越高越 慢, :) 由于时间不多,精力和水平有限,其中的缺点和错误欢迎指正,也十分欢迎哪位能帮我进一 步提高访问速度. 谢谢! 附带测试程序,其中包括与boost::multi_array&lt;;&gt;;的速度比较代码. //the end. ^=^

2006-03-16

Move Fast and Break Things: Engineering at Facebook

Joel Pobar 是编译器、编程语言和产品性能的资深专家。他来自澳大利亚的黄金海岸,现任 Facebook 工程总监,主管客户端性能的团队。 之前他带领团队开发了 Facebook 的 HHVM JIT 编译器,早些时候他在微软从事 .NET CLR 的开发。

2018-06-02

Capability Myths Demolished

This paper is concerned with three misconceptions about capability systems that we believe to be prominent among students, researchers, and practitioners of computer security.

2018-07-11

CUDA by Example

An Introduction to General-Purpose GPU Programming

2018-07-11

Searching for Build Debt: Experiences Managing Technical Debt at Google

Google管理技术债务的一些经验总结,包含依赖管理等方面。

2018-07-11

请问哪位了解南京智达康无线通信公司?

发表于 2004-02-17 最后回复 2004-02-17

关于竞业禁止合同,有熟悉的兄弟帮我看看,多谢了!

发表于 2003-11-01 最后回复 2003-11-01

什么编译器支持成员函数模板偏特化

发表于 2002-01-26 最后回复 2002-01-28

转让Cisco教程

发表于 2001-11-29 最后回复 2001-11-29

软件发布:窗口编辑器

发表于 2001-10-22 最后回复 2001-10-22

软件发布:窗口编辑器

发表于 2001-10-22 最后回复 2001-10-22

常量类成员数组如何初始化?

发表于 2001-09-23 最后回复 2001-09-24

在VC中如何使用IE的Form2.0控件组

发表于 2001-09-23 最后回复 2001-09-23

用MFC做ActiveX的问题

发表于 2001-08-06 最后回复 2001-08-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除