|
用户名:liming0658 笔名:随风舞动 地区: 湖北-武汉 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
Web Developer插件下载及使用教程
怎么样使程序的体积减小
在Delphi写了很多Form,如果直接编译的话,它会生成一个大约7M大的可执行文件,直接发给客户话,好象占有的资源比较多,程序运行也比较慢!
要什么样子才能让可执行的文件变小?
或者是在编写程序的时候要生成很多的DLL文件?
还是要怎么样设计程序,让它的运行速度更快,体积更小?
首先结构要设计合理,多用函数和过程,或者DLL。少放大图片在程序上。不经常用的可以动态生成。少用三方控件,窗体相同的可用继承方式,最后还可以用EXE压缩软件进行压缩(ASPACK等).
还有一个好办法:自己编写替代TApplication类的代码,可以大幅减少体积,但需要多写一些代码!
XML技术上传文件
编码,charset,乱码,unicode,utf-8与net简单释义(续)
1.byte与string(那些255以内的整数)的相互转换(各种进制之间的相互转换)
使用System.Convert类别
string to byte
Convert.ToByte(string,base)
base:2表示二进制,8表示八进制,10表示十进制,16表示十六进制(你要输入33,呵呵﹐异常)
这样可以把字符串的(0--255)转成一个byte
Convert.ToByte("01000001",2)转成 65
Convert.ToByte("255",10)转成255
Convert.ToByte("42",16)转成66
同理﹐byte to string也是Convert类
Convert.ToString(byte,base)
同样可以转成相应的进制表示的字符串
通过这两个方法﹐我们要进行2,8,10,16进制的相互转换就容易了
2.char,int,long,boolean等与byte[]之间的相互转换(这些数据在内存中的存储状况)
使用System.BitConverter类别
我们都知道char,int,long等基本类型是以字节形式存在内存中的﹐所以要查看其内存存储方式则直接使用BitConverter.GetBytes()就可以了
然后再使用BitConverter.ToString(byte[])就可以以string方式查看了(如:f9-03表示2个字节)
string是由char组成的﹐只要foreach(char in string)就可以看到string的存储方式了(实验表明﹐string在内存中是以unicode编码存在的,下有示例)
3.各种Encoding之间的转换
使用System.Text中的Encoding相关的类别就可以了
包括Encoding,ASCIIEncoding,UTF8Encoding等,当然也可以通过Encoding.GetEncoding()来获取不同的编码。
然后再通过GetBytes(string)方法﹐就可以获取string的不同编码的byte数组了
通过GetString(byte[])方法﹐就可以把某种编码的byte数组转成字符串.
如"I am 小生,hello world!"的各种bytes编码测试
using System;
using System.Collections;
using System.Text;
public class MyClass

{
public static void Main()
{
string tmp = "I am 小生,hello world!";
WL("内存中存储的字节数组﹕");
foreach(char c in tmp)
{
byte[] b = BitConverter.GetBytes(c);
Console.Write(BitConverter.ToString(b) + "-");
}
WL("");
WL("unicode字节数组﹕");
byte[] bs1 = Encoding.Unicode.GetBytes(tmp);
WL(BitConverter.ToString(bs1));
WL("utf8字节数组﹕");
byte[] bs2 = Encoding.UTF8.GetBytes(tmp);
WL(BitConverter.ToString(bs2));
WL("default字节数组﹕");
byte[] bs3 = Encoding.Default.GetBytes(tmp);
WL(BitConverter.ToString(bs3));
WL("big5字节数组﹕");
byte[] bs4 = Encoding.GetEncoding(950).GetBytes(tmp);
WL(BitConverter.ToString(bs4));
RL();
}
private static void WL(string text, params object[] args)
{
Console.WriteLine(text, args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break() 
{
System.Diagnostics.Debugger.Break();
}
}

在下面开始之前﹐先摘录一段关于BOM的知识
-----------------------------------------------------------------
UTF的字节序和BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
----------------------------------------------------------
好了﹐这些问题解决后﹐我们就来做单纯的文本文件的编码识别﹐读取与写入测试吧。
以windows的notepad为例(其它的文本文件读取软件的原理应该也差不多﹐只是会多一些特殊的判断算法而已)。
notepad默认有四种编码来存储和读取文本文件。分别是﹕
ANSI,Unicode,Unicode-big-endian和UTF-8。
首先来讲ANSI吧﹐这个是windows操作系统在区域与语言块设置的编码(也就是系统默认的编码)﹐因此像繁体操作系统就是big5,而简体操作系统则是GBK。
而Unicode和UTF-8这两种格式相信大家已经有所了解(当然前者是unicode-16)
而Unicode-big-endian是什么意思呢﹐它与Unicode几乎一样﹐只是它把高位放在前面(而后者则刚好相反)
上面的摘录已经有所说明﹐这里再解释一下﹕
如同样是字符"A"﹐在以下几种格式中的存储形式分别是﹕
UTF-16 big-endian : 00 41
UTF-16 little-endian : 41 00
UTF-32 big-endian : 00 00 00 41
UTF-32 little-endian : 41 00 00 00
好了﹐大家想一想﹐文本文件在硬盘中是以字节形式存储的﹐如果不知道文本文件的编码﹐那是无论如何也不能正确读出文本文件显示给用户看的(乱码了只有人才知道﹐程序则认为一切正常)
根据BOM的规则﹐因此在一段字节流开始时﹐如果接收到以下字节﹐则分别表明了该文本文件的编码。
UTF-8: EF BB BF
UTF-16 : FF FE
UTF-16 big-endian: FE FF
UTF-32 little-endian: FF FE 00 00
UTF-32 big-endian: 00 00 FE FF
而如果不是以这个开头﹐那程序则会以ANSI,也就是系统默认编码读取。
所以现在我们来做个测试就可以很清楚地对以上的东东进行验证了。
1.用notepad输入"汉A"这2个字符﹐然后分别保存成ANSI,Unicode,Unicode-big-endian和UTF-8,名字分别取为ansi.txt,unicode.txt,unicode_b.txt,utf8.txt,并且放在c盘根目录下
2.用以下程序进行验证
using System;
using System.Collections;
using System.IO;
public class MyClass

{
private static void writefile(string path)
{
FileStream fs = null;
try
{
fs = new FileStream(path,FileMode.Open);
byte[] bs = new byte[fs.Length];
fs.Read(bs,0,bs.Length);
WL(BitConverter.ToString(bs));
SixTTwo(BitConverter.ToString(bs));
}
catch(Exception ex)
{
WL(ex.ToString());
}
finally
{
if(fs!=null)
fs.Close();
}
}
public static void Main()
{
string path;
WL("ANSI文件格式的字节流﹕");
path = "c:\\ansi.txt";
writefile(path);
WL("Unicode文件格式的字节流﹕");
path = "c:\\unicode.txt";
writefile(path);
WL("Unicode-big-endian文件格式的字节流﹕");
path = "c:\\unicode_b.txt";
writefile(path);
WL("utf-8文件格式的字节流﹕");
path = "c:\\utf8.txt";
writefile(path);
RL();
}
public static void SixTTwo(string sixstr)
{
string[] tmp = sixstr.Split(new char[]
{'-'});
foreach(string s in tmp)
{

Console.Write(Convert.ToString(Convert.ToByte(s,16),2).PadLeft(8,'0')+ " 
");
}
WL("");
}
private static void WL(string text, params object[] args)
{
Console.WriteLine(text, args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break() 
{
System.Diagnostics.Debugger.Break();
}
}

3.以下是输出格式﹕
ANSI文件格式的字节流﹕
BA-BA-41
10111010 10111010 01000001
Unicode文件格式的字节流﹕
FF-FE-49-6C-41-00
11111111 11111110 01001001 01101100 01000001 00000000
Unicode-big-endian文件格式的字节流﹕
FE-FF-6C-49-00-41
11111110 11111111 01101100 01001001 00000000 01000001
utf-8文件格式的字节流﹕
EF-BB-BF-E6-B1-89-41
11101111 10111011 10111111 11100110 10110001 10001001 01000001
从以上结果可以很容易的看到BABA正是"汉"字的gb2312编码﹐当然我的操作系统是繁体的﹐如果我直接双击打开﹐则可以看到"荦A"﹐这是乱码﹐因为我的系统baba查的是big5﹐而baba的big5码正是"荦"
然而还有其它很多程序﹐像IE呀,它可以使用meta标签来识别文件的编码,xml也是可以通过encoding属性来说明文件的编码的﹐所以这些程序的识别方法和普通的又有些不同罢了。
同样﹐写一个文本文件时﹐先写入这些标记符﹐则也会帮助notepad识别这些文件的编码(当然.net专门提供了一些类别﹐如StreamWriter﹐可以直接存成某种编码的格式)。
至于各种encoding之间的转换﹐我想也不必多说了﹐通过Encoding类的Convert,GetBytes和GetString方法是很容易进行转换的。
原来潜水看别人的文章时发现很简单﹐自己写起来才发现写好一篇blog这么困难(汗...)
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1496787
网页恶性代码分析
谈Office 2000的字符编码技术
COM编程入门2
以下是参数解释:
mbstr
接受结果ANSI串的字符(char)缓冲。
wcstr
要转换的Unicode串。
count
mbstr参数所指的缓冲大小。
wcstombs()在它对WideCharToMultiByte()的调用中使用WC_COMPOSITECHECK | WC_SEPCHARS标志。用wcstombs()转换前面例子中的Unicode串,结果一样:
wcstombs ( szANSIString, wszSomeString, sizeof(szANSIString) );
CString
MFC中的CString包含有构造函数和接受Unicode串的赋值操作,所以你可以用CString来实现转换。例如:
// 假设有一个Unicode串wszSomeString...
CString str1 ( wszSomeString ); // 用构造器转换
CString str2;
str2 = wszSomeString; // 用赋值操作转换
ATL宏
ATL有一组很方便的宏用于串的转换。W2A()用于将Unicode串转换为ANSI串(记忆方法是“wide to ANSI”——宽字符到ANSI)。实际上使用OLE2A()更精确,“OLE”表示的意思是COM串或者OLE串。下面是使用这些宏的例子:
#include <atlconv.h>
// 还是假设有一个Unicode串wszSomeString...
{
char szANSIString [MAX_PATH];
USES_CONVERSION; // 声明这个宏要使用的局部变量
lstrcpy ( szANSIString, OLE2A(wszSomeString) );
}
OLE2A()宏“返回”转换的串的指针,但转换的串被存储在某个临时栈变量中,所以要用lstrcpy()来获得自己的拷贝。其它的几个宏是W2T()(Unicode 到 TCHAR)以及W2CT()(Unicode到常量TCHAR串)。
有个宏是OLE2CA()(Unicode到常量char串),可以被用到上面的例子中,OLE2CA()实际上是个更正宏,因为lstrcpy()的第二个参数是一个常量char*,关于这个问题本文将在以后作详细讨论。
另一方面,如果你不想做以上复杂的串处理,尽管让它还保持为Unicode串,如果编写的是控制台应用程序,输出/显示Unicode串时应该用全程变量std::wcout,如:
wcout << wszSomeString;
但是要记住,std::wcout只认Unicode,所以你要是“正常”串的话,还得用std::cout输出/显示。对于Unicode串文字量,要使用前缀L标示,如:
COM编程入门1
COM即组件对象模型,是Component Object Model 取前三个字母的缩写,这三个字母在当今Windows的世界中随处可见。随时涌现出来的大把大把的新技术都以COM为基础。各种文档中也充斥着诸如COM对象、接口、服务器之类的术语。因此,对于一个程序员来说,不仅要掌握使用COM的方法,而且还要彻底熟悉COM的所有一切。
本文由浅入深描述COM的内在运行机制,教你如何使用第三方提供的COM对象(以Windows 外壳组件Shell为例)。读完本文后,你就能掌握如何使用Windows操作系统中内建的组件和第三方提供的COM对象。
本文假设你精通C++语言。在例子代码中使用了一点MFC和ATL,如果你不熟悉MFC和ATL也没关系,本文会对这些代码进行完全透彻的解释。
本文包括以下几个部分:
COM——到底是什么?——COM标准的要点介绍,它被设计用来解决什么问题?
基本元素的定义——COM术语以及这些术语的含义。
使用和处理COM对象——如何创建、使用和销毁COM对象。
基本接口——描述IUnknown基本接口及其方法。
掌握串的处理——在COM代码中如何处理串。
应用COM技术——例子代码,举例说明本文所讨论的所有概念。
处理HRESULT——HRESULT类型描述,如何监测错误及成功代码。
COM——到底是什么?
简单地说,COM是一种跨应用和语言共享二进制代码的方法。与C++不同,它提倡源代码重用。ATL便是一个很好的例证。源码级重用虽然好,但只能用于C++。它还带来了名字冲突的可能性,更不用说不断拷贝重用代码而导致工程膨胀和臃肿。
Windows使用DLLs在二进制级共享代码。这也是Windows程序运行的关键——重用kernel32.dll, user32.dll等。但DLLs是针对C接口而写的,它们只能被C或理解C调用规范的语言使用。由编程语言来负责实现共享代码,而不是由DLLs本身。这样的话DLLs的使用受到限制。
MFC引入了另外一种MFC扩展DLLs二进制共享机制。但它的使用仍受限制——只能在MFC程序中使用。
COM通过定义二进制标准解决了这些问题,即COM明确指出二进制模块(DLLs和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言(如C++中的命名修饰)。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更容易地使用这些二进制代码。
如何把一个网页存为一个单独的mht文件
#include "SHDocVw_OCX.h"
#include "cdoex.h"
#include "msado15.h"
using namespace CDO;
// 本文是ccrun(老妖)根据相关资料改的,在BCB 6.0 下成功编译并测试通过.
// 如果有不能正常运行的,可能需要在机器上安装有outlook.
void __fastcall SaveWholePage(BSTR bstrUrl, BSTR bstrFileName)
{
CoInitialize(NULL);
IMessage *pMsg;
IConfiguration *pConfig;
HRESULT hr = CoCreateInstance(__uuidof(Message), NULL,
CLSCTX_INPROC_SERVER, __uuidof(IMessage), (void**)&pMsg);
hr = CoCreateInstance(
__uuidof(Configuration),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IConfiguration),
(void**)&pConfig);
pMsg->put_Configuration(pConfig);
try<br>
{
pMsg->CreateMHTMLBody(
bstrUrl,
cdoSuppressNone,
WideString(""),
WideString(""));
}
catch(...)
{
ShowMessage("有错误发生!");
return;
}
ADOStream *pStream;
pMsg->GetStream(&pStream);
pStream->SaveToFile(bstrFileName, adSaveCreateOverWrite);
pMsg->Release();
pStream->Release();
CoUninitialize();
}
// 调用举例:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SaveWholePage(WideString("http://www.ccrun.com";),
WideString("C:\\123.mht"));
}
保存页面为MHT的代码
Here's how to save a web page as a single file (mht format) using Delphi code:
uses CDO_TLB, ADODB_TLB; ... procedure WB_SaveAs_MHT(WB: TWebBrowser; FileName: TFileName); var Msg: IMessage; Conf: IConfiguration; Stream: _Stream; URL : widestring; begin if not Assigned(WB.Document) then Exit ; URL := WB.LocationURL; Msg := CoMessage.Create; Conf := CoConfiguration.Create; try Msg.Configuration := Conf; Msg.CreateMHTMLBody(URL, cdoSuppressAll, '', ''); Stream := Msg.GetStream; Stream.SaveToFile(FileName, adSaveCreateOverWrite); finally Msg := nil ; Conf := nil ; Stream := nil ; end ; end ; (* WB_SaveAs_MHT *)
Sample usage:
//first navigate WebBrowser1.Navigate('http://Delphi.about.com'); //then save WB_SaveAs_MHT(WebBrowser1,'c:\WebBrowser1.mht');
Note 1: The _Stream class is defined in ADODB_TLB unit that you probably already have created. The IMessage and IConfiguration interfaces code from cdosys.dll library. CDO stands for Collaboration Data Objects - object libraries designed to enable SMTP Messaging.
The CDO_TLB is an auto generated unit by Delphi. To create it, from the main menu select "Import Type Library", select "C:\WINDOWS\system32\cdosys.dll" then click the "Create unit" button.
Flash Media Player使用方法
Flash Media Player使用方法
作者:天涯浪子
很不错的在线播放器,支持MP3,FLV,SWF,JPG,PNG,GIF文件,同时也支持RSS/XSPF两种播放列表,同时支持javascript控制(下载地址是http://www.jeroenwijering.com/upload/flash_media_player.zip,http://www.jeroenwijering.com是播放器作者的网站),因网友“ASP菜鸟”使用这个播放器途中遇到点问题就一起稍微研究了一下,现把心得分享给大家。
什么是STL
微软自带CDONTS组件发送核心代码
<%
Set cdomail = Server.CreateObject("CDONTS.NewMail") '建立邮件对象
cdomail.Subject = "Mail Subject" '邮件标题
cdomail.From = "Sender's Mail" '发件人的地址
cdomail.To = "Email will from" '收件人的地址
cdomail.Body = "Mail Body" '邮件的内容
cdomail.Send '执行发送
%>
Jmail程序调用:
<%
'参数说明
'Subject : 邮件标题
'MailAddress : 发件服务器的地址,如smtp.163.com
'Email : 收件人邮件地址
'Sender : 发件人姓名
'Content : 邮件内容
'Fromer : 发件人的邮件地址
Sub SendAction(subject, mailaddress, email, sender, content, fromer)
Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象
jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
jmail.logging = true '启用使用日志
jmail.Charset = "GB2312" '邮件文字的代码为简体中文
jmail.ContentType = "text/html" '邮件的格式为HTML的
jmail.ServerAddress = mailaddress '发送邮件的服务器
jmail.AddRecipient Email '邮件的收件人
jmail.SenderName = sender '邮件发送者的姓名
jmail.Sender = fromer '邮件发送者的邮件地址
jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Subject = subject '邮件的标题
jmail.Body = content '邮件的内容
'由于没有用到密抄跟抄送,这里屏蔽掉这两句,如果您有需要的话,可以在这里恢复
'jmail.AddRecipientBCC Email '密件收件人的地址
'jmail.AddRecipientCC Email '邮件抄送者的地址
jmail.Execute() '执行邮件发送
jmail.Close '关闭邮件对象
End Sub
'调用此Sub的例子
Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromer
strSubject = "这是一封用JMAIL发送的测试邮件"
strContent = "JMail组件发送测试成功!"
strEmail = "runbing@eyou.com"
strFromer = "runbing@eyou.com"
strMailAddress = "mail.ubbcn.com"
Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)
%>
jmail.smtpmail的核心代码:
<%
Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象
jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
jmail.logging = true '启用使用日志
jmail.Charset = "GB2312" '邮件文字的代码为简体中文
jmail.ContentType = "text/html" '邮件的格式为HTML的
jmail.ServerAddress = "Server Address" '发送邮件的服务器
jmail.AddRecipient Email '邮件的收件人
jmail.SenderName = "SenderName" '邮件发送者的姓名
jmail.Sender = "Email Address" '邮件发送者的邮件地址
jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Subject = "Mail Subject" '邮件的标题
jmail.Body = "Mail Body" '邮件的内容
jmail.AddRecipientBCC Email '密件收件人的地址
jmail.AddRecipientCC Email '邮件抄送者的地址
jmail.Execute() '执行邮件发送
jmail.Close '关闭邮件对象
%>
w3 Jmail4.3组件核心代码:
<%
Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象
jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值j
mail.logging = true '启用邮件日志
jmail.Charset = "GB2312" '邮件的文字编码为国标
jmail.ContentType = "text/html" '邮件的格式为HTML格式
jmail.AddRecipient Email '邮件收件人的地址
jmail.From = "Email From for Sender" '发件人的E-MAIL地址
jmail.MailServerUserName = "UserName of Email" '登录邮件服务器所需的用户名
jmail.MailServerPassword = "Password of Email" '登录邮件服务器所需的密码
jmail.Subject = "Mail Subject" '邮件的标题
jmail.Body = "Mail Body" '邮件的内容
jmail.Prority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Send("Server Address") '执行邮件发送(通过邮件服务器地址)
jmail.Close() '关闭对象
%>
现代化高速公路视频监控系统解决方案
随着高速公路管理要求的不断提高,收费管理、数据通信、图像监控已经是现代化高速公路建设中必不可少的一个部分。图像监控系统主要由以GLOVIEW网络视频服务器为核心,以及摄像机、云台、解码器、等设备组成。
摄像机设置于收费通道、收费亭、重要路段口,可监视车型,减少车辆检测方面的设备、可以监视收费员的工作情况。监控软件可将收费数据和日期时间叠加显示在放行车辆图像上,并录像存档,这样既可作实时监控或有选择地审查可疑的操作人员,实现对收费作业图像信息化的监督管理,并能够对违章作弊的行为提供凭证。
监控软件可以同时显示多个收费通道、收费亭、重要路段口的画面,并在同一时间录下相关的多个图像。 从目前国内大部分的高速公路现况来看,几乎80的公路沿线都已经具有了光纤传输线路,因此,可以利用原有的光网络进行图像传输,大大的节约了建设成本。
★系统组成 系统设备
●监控前端主要由NetView网络视频服务器、摄象机(防护罩、摄象机、镜头、支架)、云台、解码器等主要设备组成。网络视频服务器是整个系统中的核心设备,实现网络化、数字化处理工作,它完成模拟视频监视信号的数字采集、影像压缩、监控数据处理、报警信号的采集、网络的传输等功能。它可将前端的模拟信号同时处理成高清晰的实时数字图像发布到网络中,可实现多用户同时监控相同或者不同的现场图像,真正做到视频共享。
●端监控有数台装有专用监控软件的电脑组成。
★系统优势:
●可以利用公路上原有的光网络传输视频图像,使布线简单化。
●稳定性好,不死机,使用嵌入式操作系统。
●不受病毒侵袭,系统采用VXWORKS操作系统,安全可*,WINDOWS系统的病毒无法入侵。
●能齐全,集成度高,具有动态IP功能。
●施工方便、价格合理。
●系统具有未来的可扩展性。
★系统功能介绍:
●减少车辆检测方面的设备投入。
●可以监视收费员的工作情况,避免舞弊行为。
●防止车辆恶意逃跑。 大型超市闭路电视实时监控系统组成及分布解决方案 摄像机安装在商场商品货架区域的上方,对商场的自助购物情况进行全方位动态实时监视。
★闭路监控系统
针对某连锁超市的要求,设计如下的超市闭路电视监控系统,该系统总计包括16台商业监控专用高分辨率彩色CCD摄像机。 其中10台为彩色定焦镜头CCD摄像机,配装室内防护罩及支架。6台为彩色16倍变焦镜头一体化摄像机,配装室内全方位云台球形防护罩。10台彩色定焦镜头摄像机安装在商场购物收银结算台及出入口上方,对商场内顾客进出及购物结算情况进行定位监视,同时可实时监视收银员工作。系统提供的 6台彩色16倍变焦镜头一体化摄像机安装在商场商品货架区域的上方,对商场的自助购物情况进行全方位动态实时监视。
★防盗报警系统
系统共计2个报警探测器,采用先进的三鉴探测器;警号和警铃各1个。 配置2个三鉴探测器分别设在商场的总出口和入口处, 需要时开启,对外界的人员等入侵进行不间断监测。警号和警铃安放在保卫室和商场大厅内,在报警探测器信号被触发后及时通知商场保安值班人员,并对入侵者进行吓阻。
●主控室配置
主控室器材主要包括1台16路8出带报警模块的主控音视频矩阵控制器 PE40、1台高分辨率彩色双功十六画面分割处理器 PE5139、1台专业多功能长时间(24小时)录象机、7台专业级14彩色监视器、6孔屏幕墙、1.5米控制台、以及1台作为十六画面同时监看和录象回放的34彩色电视机。系统提供的系统矩阵主控制器能对系统内的各监视点图像进行自由切换,并显示在任意彩色监视器上,还能任意控制系统内的变焦镜头摄像机、云台的各种动作。内置报警模块还可以在报警探测器的信号触发下进行联动,实现强制切换视频图象、触发录象机录象、警号鸣叫等功能。画面分割处理器能将16个监视点的图像信号以画面合成的方式同时显示在一台彩色电视机的屏幕上,并能将合成信号用长延时录像机进行录像存档。
●分控配置
系统设置1台分控计算机, 配合外置分控器及分控软件,由首长用户(商场经理)进行操作和使用。它是通过多媒体计算机来实现所有的监视控制功能,并能将拍摄的画面实时显示在计算机显示器上。计算机可以由用户自行提供,目前市场上的多媒体机型均可使用。
java swing组件
com组件
JAVA组件
JAVA容器
我的观点
1
容器只是一个概念、一种架构。就拿EJB Server来说,Server试图为Bean提供分布式、事务、安全等基础设施,那么就必须有一个凌驾于Bean之上的Layer或者说warp,这样才能够从高层拦截Bean调用,进行一些额外操作。这样的架构就叫做容器架构。
2
可以放其他组件上去的组件 。
java框架
框架就是方便用户使用,很多东西都是有共性的,只要架子一搭好就很方便做事情了,另外框架还能让开发人员减少出错的情况,把开发人员限制在一个范围内。hibernate做持久化的好些,sturts做JSP网站的好些。
1:使用框架就是使用它已经实现了的非常有用的功能,我们直接调用就行了,减轻劳动量。
2:许多优秀的框架都是免费的,如struts。
關於面向介面編程(轉)
先定義介面,然後寫一個抽象類類實現通用的操作,專用的操作定義為抽象方法,強制繼承類實現。這樣一般的類就直接繼承該抽象類,然後比較特殊的地方實現抽象方法。非常特殊的類就直接實現介面。
在用Java 編程的時候, 派生的來源可以是抽象類
( abstract class)、也可以是介面( interface)。何時使用抽象類? 何時使用介面? 這幾
個帖子正是討論了這個問題。
( 提出問題)
Alan, 我買了你的書, 讀到了其中“ Bridge 模式” 那一章。然後, 我把一位朋友— —
他是個Java專家, 有五、六年使用Java的經驗— — 叫來, 把你的書給他看, 並請他為我解
釋你的Java 代碼。我自己比較偏向於使用介面, 而你更多的使用了抽象類。他得出的結論
是: 你偏向於使用抽象類, 這反映出你對C++的愛好多於對Java的愛好。畢竟Java才有接
口這個概念, 而C++只有抽象類。因此, 我們感覺: 如果把你的示例代碼中的抽象類換成接
口, 也許會使它們更能反映出實際情況和“ 按照協議設計” 的思想。實際上, 如果讀過Peter
Coad的書, 你會發現他也主要使用介面。
( Alan Shalloway 的答覆)
感謝你對這本書的評論。
我用Java 也有五、六年了, 所以我不認為使用抽象類就表示沒有經驗。實際上, 我覺
得Java 的一大缺憾就是它不支援多繼承, 所以開發者經常被迫使用介面, 因為繼承只能使
用一次。當然了, 這裡面涉及到多繼承的性能問題和基類成員的名字重復問題。但是不管怎
麼說, 不允許多繼承總是值得質疑的。
至於我這本書, 我選擇使用抽象類, 是因為大多數人都熟悉它— — 不是每個人都喜歡去
看章節後面的C++示例的, 所以我決定用這種更通用的示例。
介面的問題就是它無法擁有默認行為。如果你用介面來定義一個什麼東西並希望跨過這
層封裝來添加一些行為, 你就必須使用委託。在我的記憶中, 有很多次就是因為不支援默認
行為而造成了麻煩。為了繞過這個限制, 我會使用委託, 但是這也是個痛苦的事情。
BTW: 我很喜歡Coad的書— — 我認為那是有史以來最好的設計書籍之一。
( Scott Bain 的跟貼)
從我自己的角度來說, 我是一個Java程式員( 從來沒用過C++)。但是每當我遇到單繼
承關係的時候, 我傾向於使用抽象類, 儘管我知道Java 不支援多繼承。為什麼這樣? 因為
即使我現在沒有任何默認行為, 將來我還可以放進一些默認行為, 而不必修改子類的結構。
而且, 如果要在一個繼承體系中放置工廠方法來生成子類的實例, 抽象類是就是最好、
最合乎邏輯的地方。因為客戶對象只需要“ 知道” 抽象類就可以了, 通過轉型得到的實例完
全封裝了子類的存在和選擇子類的規則。這使得系統的擴展變得簡單,而且不會造成副作用。
只有當需要讓一個類“ 象什麼” 而非“ 是什麼” 的時候, 我才會使用介面。
( Alan Shalloway 的回復)
PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
精彩! 很高興看到這樣的回復! J
我也發現, 在Java 中缺少默認行為造成的影響似乎還沒有真正引起人們的重視。從一
開始, SUN 似乎就忽略了向後相容的問題。我可以大膽的預言: 完全用介面構建成的系統將
在幾年之後發現這是一個大問題。據我所知, 有幾個基於COM 模型( 也就是介面) 構建的應
用程式的開發者現在已經陷入了維護問題, 因為當他們想修改介面來應對新的情況( 比如添
加新的參數或新的方法) 時, 這會耗去他們大量的時間。如果使用抽象類, 修改就不會這麼
困難, 因為你可以只修改默認方法, 子類就不用動了。
我可不是說不能使用介面, 但是你必須清楚: 有些時候應該使用介面, 而有些時候就是
應該使用抽象類。不幸的是, 由於Java不支援多繼承, 你必須很小心的做出選擇。
( Scott Bain 的跟貼)
同樣精彩! 關於介面, 我再來廢話幾句:
有時候, 一個東西可以“ 是” 幾個東西。不明白這句話嗎? 我就拿我自己來舉個例子吧:
我“ 是”一個程式員、一個老師、一個作者、一個父親… … 你可以說我“ 實現了老師的介面”,
學生們會向我詢問關於上課的問題。我還“ 實現了父親的介面”, 但是我的學生可能知道這
一點, 也可能不知道。如果他們知道這一點, 他們就可以放心的向我詢問關於撫養小孩的問
題了。
但是, 儘管我實現了所有這些介面, 我還有一個抽象類— — “ 人”。這個抽象類給我提
供了所有的默認行為( 比如說我偶爾會走揹運)。
http://big5.phoenixtv.com:82/gate/big5/blog.phoenixtv.com/user3/s2006918/archives/2006/300266.html