文档视界 最新最全的文档下载
当前位置:文档视界 › ShockwaveFlash控件详解

ShockwaveFlash控件详解

ShockwaveFlash控件详解
ShockwaveFlash控件详解

ShockwaveFlash控件详解(一)---属性(转)

属性:

1.AlignMode (读写)

语法:AlignMode As Long

说明:对齐方式,与SAlign 属性联动。当控件的长宽比例与影片不一致且WMode 不为ExactFit 时,影片(没有被放大的)在控件中显示的位置可用该属性调整。该属性值由标志位组成。如图,将该属性值(二进制)中相应的位标记为1 就设置了相应的对齐方向。属性值与相应的对齐方式。后面括号里是二进制数。

1:左对齐(0001)

2:右对齐(0010)

4:顶对齐(0100)

8:底对齐(1000)

也可以组合各种对齐方式,同时将两个或以上的位标记为1,也就是将这四个基本值组合相加。比如同时左对齐和顶对齐,属性值则设为5(0101)。

例子:设置影片为右对齐:

movie.AlignMode = 2

2.SAlign (读写)

语法:SAlign As String

说明:对齐模式(与AlignMode 联动)。当AlignMode

代表各对齐模式的位被置“1”时,SAlign 值也相应被设为

“L”(Left)、“T”(Top)、“R”(Right)、“B”(Bottom)各字符的组合。‘L’、‘T’、‘R’、‘B’的先后顺序不变。

例子:设置影片为左对齐和顶对齐:

movie.SAlign = "LT"

3.BackgroundColor(读写)

语法:BackgroundColor As Long

说明:影片的背景色(与BGColor 联动)。以(红×65536 +绿×256 +蓝)计算颜色值。红绿蓝颜色取值范围(0-255)。默认的影片背景色为-1 。如果影片设置了底色或有图片当作背景,那么看不出来该属性值的改变会有什么影响。

例子:将影片背景色设为蓝色:

movie.BackgroundColor = 255

4.BGColor (读写)

语法:BGColor As String

说明:影片的背景色(与BackgroundColor 联动)。与BackgroundColor 不同的是,BGColor 是一个六位的十六进制数,每两位分别代表红绿蓝颜色值。如:FFEEAA表示红色值为FF、绿色值为EE 、蓝色值为AA。

例子:将影片背景色设为红色:

movie.BGColor = "FF0000"

5.Base (读写)

语法:Base As String

说明:指定用于解决影片中所有相对路径的声明的基地址。当影片与其需要的其他文件不在同一目录中的时候该属性特别有用。如不特别指定,Base 的值默认为".",也就是当前影片所在的路径。

例子:

movie.Base = "https://www.docsj.com/doc/b58496061.html,/pathname1/pathname2"

6.Movie (读写)

语法:Movie As String

说明:要播放的影片路径(URL)。设置该属性为一个SWF 文件的URL 将载入文件并播放它。若影片是在本地硬盘上,要写成从盘符开始的绝对路径;若影片是在某网站上,也要写全URL 地址。

例子:

movie.Movie = "https://www.docsj.com/doc/b58496061.html,/path1/path2/filename.swf"

movie.Movie = "c:\temp\test.swf"

7.DeviceFont (读写)

语法:DeviceFont As Boolean

说明:决定是否使用影片内嵌的字体,默认值为False。将该属性值设为True 则强制播放器不使用影片中的内嵌的字体而使用本地系统字体。

例子:

movie.DeviceFont = True

8.EmbedMovie (读写)

语法:EmbedMovie As Boolean

说明:影片是否被存贮到控件所在的容器中。当你已载入一个影片后将该属性设为True,播放影片时就不必再去读SWF 文件了。这使得在PowerPoint 简报或VB 程序里使用Flash 影片更容易。但将该属性设为True 后,控件的Movie 属性就不再接受新的值了。要想播放另一个影片(给Movie 属性赋新值),必须先将EmbedMovie 属性设为False 。例子:

movie.EmbedMovie = True

9.FrameNum (读写)

语法:FrameNum As Long

说明:影片当前帧的编号(从0 开始计数)。设置该属性值将使影片停在由FrameNum 指定的帧处。

例子:显示当前帧数:

MsgBox " 当前显示的是第" & movie.FrameNum & " 帧。"

使影片显示第10 帧:

Bomovie.FrameNum = 9

10.TotalFrames(只读)

语法:TotalFrames As Long

说明:返回影片中总帧数。该参数要到影片载入完成才有效(ReadyState=4)。

例子:

If movie.ReadyState = 4 Then MsgBox " 本影片共有" & movie.TotalFrames & "帧。"

11.Loop (读写)

语法:Loop As Boolean

说明:是否循环播放。设为True 是循环播放,设为False 则只播放一次。

例子:

movie.Loop = True

12.Menu (读写)

语法:Menu As Boolean

说明:是否显示菜单。设为True 显示所有菜单,设为False 菜单被屏蔽,但仍有一项“About Macromedia Flash Player...”。如果你实在不喜欢这个菜单,应该在程序中通过拦截鼠标消息的方法来达到目的。与在独立的Flash 播放器中不同的是,在控件的右键菜单里点“About...”的话,就会打开浏览器到Macromedia 的网站上去看About 。

例子:

movie.Menu = False

13.Playing (只读)

语法:Playing As Boolean

说明:当前播放状态。如果影片正在播放,该属性值为True ,否则为False 。

例子:

If movie.Playing = False Then MsgBox " 影片已停止播放!"

14.Quality (读写)

语法:Quality As Long

说明:画面质量(与Quality2 联动)。Quality 可以取:

0 ——相当于Quality2 取"Low"

1 ——相当于Quality

2 取"High"

2 ——相当于Quality2 取"AutoLow"

3 ——相当于Quality2 取"AutoHigh"

例子:

movie.Quality = 1

15.Quality2(读写)

语法:Quality As String

说明:画面质量(与Quality 联动)。Quality2 可以取:

Low:偏重于播放速度而不管显示效果,而且不启用

消锯齿功能。

High:偏重于画面而不管播放速度,并且总是启用消锯齿功能。如果影片中不包含动画就平

滑处理位图;如果有动画,那么位图就不被平滑处理。(这里的动画应该是把一张图片做平移或旋转)

AutoLow:先着重于播放速度,但只要有可能就改善显示效果。一开始播放时先禁用消锯齿功能。如果播放器检测到处理器能承受得了,就启用消锯齿功能。

AutoHigh:一开始是播放速度和显示效果并重,但如有必要就牺牲画质确保速度。开始播放时就启用消锯齿功能。但如果实际的帧速率比设计时指定的速率慢了,就禁用消锯齿功能来提高播放速度。

例子:

movie.Quality2 = "High"

16.ReadyState(只读)

语法:ReadyState As Long

说明:影片的当前状态。ReadyState 可以取:

0 ——正在载入

1 ——未初始化

2 ——已载入

3 ——正在交互

4 ——完成例子:

If movie.ReadyState = 4 Then MsgBox " 影片载入完成!"

17.Scale (读写)

语法:scale As String

说明:缩放模式(与ScaleMode 联动)。Scale 可以取:

ShowAll ——在控件内显示全部影片区域,保持影片长宽比例不变,影片的大小决定于控件长或宽中较小的一边。

NoBorder ——在控件内显示部分影片区域,保持影片长宽比例不变,影片的大小决定于控件长或宽中较大的一边。

ExactFit ——在控件内显示全部影片区域,将影片的长宽比例强制等于控件的长宽比例。例子:

MsgBox " 当前的缩放模式是:" & movie.Scale

18.ScaleMode(读写)

语法:ScaleMode As Long

说明:缩放模式(与Scale 联动)。ScaleMode 可以取:

0 ——相当于Scale 取"ShowAll"

1 ——相当于Scale 取"NoBorder"

2 ——相当于Scale 取"ExactFit"

例子:使影片的缩放模式改成“ExactFit ”:

movie.ScaleMode = 2

19.Stacking (读写)

语法:Stacking As String

说明:用于HTML,将Flash Player 当成HTML 中的一种“行为”使用时,该属性决定Flash 影片相对于与其参照的HTML 内容如何显示。(有关“行为”请参阅样式表的资料)。

Stacking 可以取:

none ——“行为”不显示。

replaceall ——“行为”的显示取代全部其他元素的内容,包括背景。

content ——“行为”的显示只取代其他元素的内容。

background ——“行为”的显示只取代其他元素的背景。

below ——“行为”在所有其他元素内容的下面显示。

belowflow ——“行为”以反向Z 顺序显示在其他元素的子对象之上,但在该元素主要内容之上。

aboveflow ——“行为”以正向Z 顺序显示在其他元素的子对象之下,但在该元素主要内容之上。

above ——“行为”显示在所有其他元素的内容之上。

top ——“行为”的显示置于整个页面内容之上。

例子:

movie.Stacking = "below"

20.WMode (读写)

语法:WMode As String

说明:控件的窗口模式。WMode 可以取:Window ——WMode 属性的默认值,按Flash 播放器

典型的方式工作,即在控件的矩形窗口中播放影片,这样一般都能提供最快的动画效果。Opaque ——使影片不透明。Transparent ——创建一个透明的影片。如果影片中有

透明的片段,放到这里时,就可以看到控件下面的背景。但使用此属性值,动画的播放速度可能会慢一些。

例子:

movie.WMode = "Transparent"

ShockwaveFlash控件详解(二)---方法与事件(转)

方法:

下面中的方法不返回值:

1.Back

语法:Back()

说明:影片后退一帧,并且停止播放。例子:

movie.Back

2.Forward

语法:Forward()

说明:影片前进一帧,并且停止播放。

例子:

movie.Forward

3.GotoFrame

语法:GotoFrame(FrameNum As Long)

说明:将影片跳转到由FrameNum 指定的帧,并且停止播放。如果所指定的帧还未载入,播放器前进到最后的可用帧并停下,在调用过程中会产生无法预料的后果。最好使用PercentLoaded 方法来确定是否已载入足够的影片来执行本方法。参数FrameNum 是从0 开始的,这和Flash 中的Goto 动作不一样,它是从1 开始的。

例子:跳转到影片的第20 帧:

movie.GotoFrame 20

4.LoadMovie

语法:LoadMovie(layer As Long, url As String)

说明:将由url 指定的影片载入到由layer 指定的层上。

例子:将movie.swf 载入至0 层:

movie.LoadMovie 0, "movie.swf"

5.Pan

语法:Pan(x As Long, y As Long, mode As Long)

说明:将一个放大过的影片平移由x 和y 指定的距离。x 和y 均为相对值。即控件相对于影片来说平移的距离(你可以想象控件是一个窗户,影片是我们从窗户里看到的放在外面的布景, 我们看到窗户相对于布景平移了一些距离,那是外面的布景在动,而窗户是不动的)。用mode 参数来指定x 和y 的值是像素还是窗口的百分比,当mode=0 时坐标系以像素为单位;mode=1 时坐标系就以窗口的百分比来计算。平移并不能超出影片的边框,也就是说,往一个方向平移最多到达影片的边缘与控件对齐的程度。

例子:控件相对于影片向左向上各平移 5 个像素(当然控件不会动,是影片向右向下平移了):

6.Play

语法:Play()

说明:开始播放影片。

例子:

movie.Play

7.Rewind

语法:Rewind()

说明:倒带。返回到影片的第一帧。

例子:

movie.Rewind

8.SetV ariable

语法:SetV ariable(name As String, value As String)

说明:将由name 指定的Flash 变量值设为value。

例子:

movie.SetV ariable "/Form:UserName", "John Smith"

---------------------------------------------------------------------------

事件:

1.FSCommand

语法:ShockwaveFlash1_FSCommand(ByV al command As String, ByV al args As String)

说明:在flash中调用fscommand()触发的事件

参数:

command :代表命令标识

args :代表参数

例子:

Select Case command '这里可以用if

'但command多了之后就不好if 用了

'我是做个示范

Case "command1"

If args = "123" Then

...

Else

...

End If

Case ...

End Select

2.FlashCall

语法:ShockwaveFlash1_FlashCall(ByV al request As String)

说明:可能很少人知道这个事件的用处,其实这个跟FSCommand 事件是差不多的。与FSCommand 不同的是,这个事件可以有返回值(下面会谈到)

参数是一个XML格式的字符串,格式是

"%s",去查查帮助就知道了。

处理request:标准VB没有处理XML的库,你可以自己找支持XML的插件来用。下面就是按照个人需要处理request了。

返回值:

事件处理函数是没有返回值的,但是flash player提供了一个方法:ShockwaveFlash1.SetReturnV alue() 专门传递返回值,格式是%s(也可以是别的AS结构,具体看帮助)。

例子:我在这给出tinyxml的例子:

Private Sub ShockwaveFlash1_FlashCall(ByV al request As String)

Dim request_xml As New TiXmlDocument

Dim request_name As String

request_xml.Parse request

request_name = request_xml.RootElement().Attribute("name")

...自己去处理吧

End Sub

3.OnProgress

语法:ShockwaveFlash1_OnProgress(ByV al percentDone As Long)

说明:估计是flash在加载过程中进度改变触发的吧?

percentDone 则应该是个百分数~

反正我还没逮住这个事件一次..= =!

4.OnReadyStateChange

语法:ShockwaveFlash1_OnReadyStateChange(newState As Long)

说明:顾名思义,就是ReadyState 改变时触发的事件,具体请看上面关于ReadyState 属性的说明,我在这就不废话了....

至于其他事件,比如

GotFocus啦、LostFocus啦,我也不想废话了...

PS:shockwave flash object控件的相应类是CShockwaveFlash类,该类的常用函数:

Play() 播放动画StopPlay() 停止动画IsPlaying():动画是否正在播放(true,false)

GotoFrame(frame_number)跳转到某帧(frame_number+1)

TotalFrames() 获取动画总帧数CurrentFrame()回传当前动画所在帧数-1

Rewind() 使动画返回第一帧SetZoomRect(left,top,right,buttom)放大指定区域

Zoom(percent) 改变动画大小Pan(x_position,y_position,unit) 使动画在x,y方向上平移

PercentLoaded()返回动画被载入的百分比(0-100)

LoadMovie(level_number,path) 加载动画

TGotoFrame(movie_clip,frame_number) movie_clip跳转到指定帧数

TGotoLabel(muvie_clip,label_name) movie_clip跳转到指定标签

TCurrentFrame(movie_clip) 回传movie_clip当前帧-1

TCurrentLabel(movie_clip) 回传movie_clip当前标签

TPlay(movie_clip) 播放movie_clip TStopPlay(movie_clip) 停止movie_clip的播放

GetV ariable(variable_name) 获取变量SetV ariable(variable_name,value) 变量赋值

TCallFrame(movie_clip,frame_number) call指定帧上的action

TCallLabel(movie_c lip,label) call指定标签上的action

TGetProperty(movie_clip,property) 获取movie_clip的指定属性

TSetProperty(movie_clip,property,number) 设置movie_clip的指定属性

com控件详解

MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户程序可以捕获该事件进行相应处理。本文的两个例子均采用该方式。另一种为查询方式,在用户程序中设计定时或不定时查询 MSComm控件的某些属性是否发生变化,从而确定相应处理。在程序空闲时间较多时可以采用该方式。 常用属性和方法 利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。以下是MSComm控件的常用属性和方法: ●Commport:设置或返回串口号。 ●Settings:以字符串的形式设置或返回串口通信参数。 ●Portopen:设置或返回串口状态。 ●InputMode:设置或返回接收数据的类型。 ●Inputlen:设置或返回一次从接收缓冲区中读取字节数。 ●InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。 ●InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。 ●Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。 ●OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。 ●OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。 ●Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。 ●Rthreshold:该属性为一阀值。当接收缓冲区中字符数达到该值时,MSComm 控件设置Commevent属性为ComEvReceive,并产生OnComm事件。用户可在OnComm 事件处理程序中进行相应处理。若Rthreshold属性设置为0,则不产生OnComm 事件。例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。这样接收缓冲区中接收到一个字符,就产生一次OnComm 事件。 ●Sthreshold:该属性亦为一阀值。当发送缓冲区中字符数小于该值时,MSComm 控件设置Commevent属性为ComEvSend,并产生 OnComm事件。若Sthreshold 属性设置为0,则不产生OnComm事件。要特别注意的是仅当发送缓冲区中字符数小于该值的瞬间才产生 OnComm事件,其后就不再产生OnComm事件。例如Sthreshold设置为3,仅当发送缓冲区中字符数从3降为2时,MSComm控件设置 Commevent属性为ComEvSend,同时产生OnComm事件,如发送缓冲区中字符始终为2,则不会再产生OnComm事件。这就避免了发送缓冲区中数据未发送完就反复发生OnComm事件。 ●CommEvent:这是一个非常重要的属性。该属性设计时无效,运行时只读。一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。用户程序就可在OnComm 事件处理程序中针对不同的代码,进行相应的处理。 CommEvent属性的代码、常数及含义参见表1及表2。 表1 CommEvent通信事件代码常数含义 1 ComEvReceive 接受到Rthreshold个字符。该事件将持续产生,直到用Input 属性从接受缓冲区中读取并删除字符。 2 ComEvSend 发送缓冲区中数据少于Sthreshold个,说明串口已经发送了一些

VisualStudio_各个控件详解

.NET控件详解 (2011-07-2022:44:33) 转载 标签:it分类:C#语言 微软的.net控件详解,没有那个比这个更权威的了网址: https://www.docsj.com/doc/b58496061.html,/QuickStartv20/aspnet/doc/ctrlref/standard/multiview. aspx 参考资料: https://www.docsj.com/doc/b58496061.html,/QuickStartv20/aspnet/doc/ctrlref/standard/multiview. aspx 网易学院:https://www.docsj.com/doc/b58496061.html,/special/000915SN/stvs2005.html 参考资料:https://www.docsj.com/doc/b58496061.html,/tianine5/blog/item/1470aa35f46bad8aa61e1285.html .NET控件命名规范 备注 控件名称简写(前 缀) Label lbl标签 TextBox txt文本框 Button btn按钮 LinkButton lnkbtn

ImageButton imgbtn ListBox lst列表框DropDownList ddl DataGrid dg DataList dl CheckBox chk CheckBoxList chklst RadioButton rdo单选按钮RadioButtonList rdolst Image img图片Panel Pnl-面板Calender cal AdRotator ar Table tbl RequireFieldValidator rfv CompareValidator cv RangeValidator rv RegularExpressionValidatorrev ValidatorSummary vs CrystalReportViewer rptvew ComboBox cbo组合框

C#编写COM组件示例

C#编写COM组件 1、新建一个类库项目 2、将Class1.cs改为我们想要的名字 问是否同时给类改名,确定

3、修改Properties目录下面的AssemblyInfo.cs ComVisible属性设置为True 4、项目菜单->MyLib属性 找到“生成”选项卡 往下看,找到“为COM Interop 注册”勾上

5、继续往下,找到“签名”选项卡 勾上“为程序集签名” 在下面的下拉框里面选择“<新建...>” 6、在弹出的对话框里面,输入MyLib。。或者随便取个名字 去掉使用密码保护文件的选项 7、开始编码,任何一个公开的类,必须有一个I开通的接口定义C# code

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace MyLib { [ComVisible(true)] [Guid("2CBD3D76-35F1-4f9d-9C1B-9DBFEE412F76")] public interface IMyClass { void Initialize(); void Dispose(); int Add(int x, int y); } [ComVisible(true)] [Guid("EA2F140A-108F-47ae-BBD5-83EEE646CC0D")] [ProgId("MyLib.MyClass")] public class MyClass : IMyClass { public void Initialize() { //nothing todo } public void Dispose() { //nothing todo } public int Add(int x, int y) { return x + y; } } }

COM组件设计与应用

IDispatch 接口for vc6.0 作者:杨老师 下载源代码 一、前言 终于写到了第九回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用、非常有用、非常精彩的一个COM 功能。由于WORD、EXCEL 等OFFICE 软件提供了“宏”的功能,就连我们使用的VC开发环境也提供了“宏”功能,更由于HTML、ASP、JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性。 如果你使用vc6.0 的开发环境,请继续阅读。 如果你使用https://www.docsj.com/doc/b58496061.html, 2003,请阅读下一回。 二、IDispatch接口 如果是编译型语言,那么我们可以让编译器在编译的时候装载类型库,也就是装载接口的描述。在第七回文章当中,我们分别使用了#include 方法和#import 方法来实现的。装载了类型库后,编译器就知道应该如何编译接口函数的调用了---这叫“前绑定”。但是,如果想在脚本语言中使用组件,问题就大了,因为脚本语言是解释执行的,它执行的时候不会知道具体的函数地址,怎么办?自动化接口就为此诞生了---“后绑定”。 自动化组件,其实就是实现了IDispatch 接口的组件。IDispatch 接口有4个函数,解释语言的执行器就通过这仅有的4个函数来执行组件所提供的功能。IDispatch 接口用IDL 形式说明如下:(注1) [ object, uuid(00020400-0000-0000-C000-000000000046), // IDispatch 接口的 IID = IID_IDispatch pointer_default(unique) ] interface IDispatch : IUnknown { typedef [unique] IDispatch * LPDISPATCH; // 转定义IDispatch * 为 LPDISPATCH HRESULT GetTypeInfoCount([out] UINT * pctinfo); // 有关类型库的这两个函数,咱们以后再说 HRESULT GetTypeInfo([in] UINT iTInfo,[in] LCID lcid,[out] ITypeInfo ** ppTInfo);

用C创建COM组件全过程

本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用。并附有完整测试通过的代码。该功能总体看来很简单。可是我在第一次用C#做COM的时候,痛不欲生。因为很少有人写这类文章。而且就算有代码也是乱帖。根本是让人误入歧途。后来在C# help上面看一个老外写的文章(上面有一个完整的SQL SERVER实例),才完成该功能。拿来分享。 开发工具:VS2008 VS2008命令提示符(呵呵,这个你应该可以找到在什么地方吧) 附:本文适用任何VS系列工具。 在用C#创建COM组件时,一定要记住以下几点: 1:所要导出的类必须为公有; 2:所有属性、方法也必须为公有; 3:要导出的属性、方法必须用接口方式;如果没有在接口中声明,即使该方法(属性)为公有,也不能正常导出到COM。但他们可以被别的.NET程序所使用; 4:所有的事件也必须用接口方式; 现在我们开始正题: 一、新建一个Visual C#工程(习惯这种叫法了,现在应该叫解决方案),选择类型“类库”;我就叫MyCom吧。 二、编写导出接口。为了大家理解方便,我仅一加法操作举例。如下: 1.[Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")] 2.public interface MyCom_Interface 3. { 4. [DispId(1)] 5.int Add(int a, int b); 6. } Guid为全局唯一标识,可以用VS2008的命令提示符中输入:guidgen 就会出来它的窗口。在几个复选框选择最后一个Registry Format,点击New Guid,然后COPY就行了(以下如有guid的字符串,全部同样操作) [DispId(1)]为函数的标识。如果有多个函数可相应的在函数前面加[DispId(2)], [DispId(3)]… 三、创建事件接口。

C#编写COM组件示例

C#编写COM组件 1、新建一个类库项目? ? 2、将Class1.cs改为我们想要的名字? ? 问是否同时给类改名,确定?

? 3、修改Properties目录下面的AssemblyInfo.cs? ComVisible属性设置为True? ? 4、项目菜单->MyLib属性? 找到“生成”选项卡? ? 往下看,找到“为COM Interop 注册”勾上? ?

5、继续往下,找到“签名”选项卡? ? 勾上“为程序集签名”? ? 在下面的下拉框里面选择“<新建...>”? ? 6、在弹出的对话框里面,输入MyLib。。或者随便取个名字? ? 去掉使用密码保护文件的选项? ? 7、开始编码,任何一个公开的类,必须有一个I开通的接口定义? C# code using System;

using using System.Text; using ropServices; namespace MyLib { ????[ComVisible(true)] ????[Guid("2CBD3D76-35F1-4f9d-9C1B-9DBFEE412F76")] ????public interface IMyClass ????{ ????????void Initialize(); ????????void Dispose(); ????????int Add(int x, int y); ????} ????[ComVisible(true)] ????[Guid("EA2F140A-108F-47ae-BBD5-83EEE646CC0D")] ????[ProgId("MyLib.MyClass")] ????public class MyClass : IMyClass ????{ ????????public void Initialize() ????????{ ????????????//nothing todo ????????} ????????public void Dispose() ????????{ ????????????//nothing todo ????????} ????????public int Add(int x, int y) ????????{ ????????????return x + y; ????????} ????} } 8、GUID属性里面的那个字符串,在“工具”菜单下面,“创建GUID”? ? 选择Registry Format,然后复制?

COM组件

COM组件 COM(Component Object Model (组件对象模型)) COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。 COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。 COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。 一个应用程序通常是由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。 目前这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也既组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。 传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。 COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。 使用组件的优点: 组件架构的一个优点就是应用可以随时间的流逝而发展进化。除此之外,使用组件还有一些可以使对以有应用的升级更加方便和灵活的优点,如应用的定制,组件库以及分布式组件等。使用组件的种种优点直接来源于可以将它们动态的插入或卸出应用。为了实现这种功能,所有的组件必须满足两个条件:第一,组件必须动态链接;第二,它们必须隐藏(或封装)其内部实现细节。动态链接对于组件而言是一个至关重要的要求,而消息隐藏则是动态链接的一个必要条件。 ---------------------------------------到现在为止com是一种抽象的组件的变程思想,具体的体现就是进程内的可视化的控件(ocx)与连接库(DLL),还有一种进程外的EXE组件。 按照组件化程序设计的思想,复杂的应用程序被设计成一些小的、功能单一的组件模块,这

C#编写COM组件示例

J 取稍 ■it:rosoft Visual Studio c#编写组件 3、修改 Properties 目录下面的 Assemblylnfo.cs 问是否同时给类改名,确定 「i 赳逹解决方実的目呈 □心tc 1、新建一个类库项目 悠正在重命名1个丈件°您也想在这亍对代玛元素“口皐丸汁的所有引用的项且中执行重命名吗? 「- Vi?*l M Studi 9 已安It 的49柢 Wmdowi; Offic* ^Windows 应用程序 邙类J# +習意设备 初学者工具包 ^Iindswi 校件障 .黑控制色应用程睜 口没备应用谡洋 立£氐住1工件薄 ^Outl?ok 序 -茸他语茗 + Vi lu*l Bhli C 我的崔笛 * VnuU J* + ViiukL Ctt 申攢累題机極检 対布式系卿拱方矍 +直纯顼目尖型 FKP Fyoj^cti * iftf 试顶目 用于创建c?食库(丑“的項自 取目类型疋) ▼ X 1解决方秦资瀝管理器-解决方案'畑. V 為建固亘艮 ... r — J 嬉决方案“NlyLib" Cl 不项引 .-1 耳 I^Lib ■+ 宜 & 』弓I 用 电阪由臣詞心|

Visible 属性设置为True //将ComVi^bl^设置为£心^使此程序集中的类型 //对C0H 组件不可见.如果需要从口州诂问此程序集中的类型‘ //则将该类挈上的Co^Visibl^屈性设置划讣晒 L assembly : CoirJ/i sible (true)] 4、项目菜单->MyLib 属性 找到“生成”选项卡 HyLib* MyClasE. cs 应用程序 配置(E ):论 常规 - ------ 条件編 回定义: 生成束件 调试 5、继续往下,找到“签名”选项卡 勾上“为程序集签名” 在下面的下拉框里面选择“ <新建…〉 签名* 优谒分柝 6在弹出的对话框里面,输入 MyLib 。。或者随便取个名字 去掉 使用密码保护文件的选项 往下看,找到“为In terop 注册”勾上 上为11序薙签容 谱释徑名拆惡旃艾件Of) 孫迟签容后*西目将不g 匡打,也不紐进石调试.

COM组件三个最基本的接口类和使用COM库的三种方法

COM组件三个最基本的接口类//VC6中使用COM库的三种方法 COM组件有三个最基本的接口类,分别是IUnknown、IClassFactory、IDispatch。 COM规范规定任何组件、任何接口都必须从IUnknown继承,IUnknown包含三个函数,分别是QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。QueryInterface用于查询组件实现的其它接口,说白了也就是看看这个组件的父类中还有哪些接口类,AddRef用于增加引用计数,Release用于减少引用计数。引用计数也是COM中的一个非常重要的概念。大体上简单的说来可以这么理解,COM组件是个DLL,当客户程序要用它时就要把它装到内存里。另一方面,一个组件也不是只给你一个人用的,可能会有很多个程序同时都要用到它。但实际上DLL只装载了一次,即内存中只有一个COM组件,那COM组件由谁来释放?由客户程序吗?不可能,因为如果你释放了组件,那别人怎么用,所以只能由COM组件自己来负责。所以出现了引用计数的概念,COM维持一个计数,记录当前有多少人在用它,每多一次调用计数就加一,少一个客户用它就减一,当最后一个客户释放它的时侯,COM知道已经没有人用它了,它的使用已经结束了,那它就把它自己给释放了。引用计数是COM编程里非常容易出错的一个地方,但所幸VC的各种各样的类库里已经基本上把AddRef的调用给隐含了,在我的印象里,我编程的时侯还从来没有调用过AddRef,我们只需在适当的时侯调用Release。至少有两个时侯要记住调用Release,第一个是调用了QueryInterface以后,第二个是调用了任何得到一个接口的指针的函数以后,记住多查MSDN 以确定某个函数内部是否调用了AddRef,如果是的话那调用Release的责任就要归你了。IUnknown的这三个函数的实现非常规范但也非常烦琐,容易出错,所幸的事我们可能永远也不需要自己来实现它们。 IClassFactory的作用是创建COM组件。我们已经知道COM组件实际上就是一个类,那我们平常是怎么实例化一个类对象的?是用…new?命令!很简单吧,COM组件也一样如此。但是谁来new它呢?不可能是客户程序,因为客户程序不可能知道组件的类名字,如果客户知道组件的类名字那组件的可重用性就要打个大大的折扣了,事实上客户程序只不过知道一个代表着组件的128位的数字串而已,这个等会再介绍。所以客户无法自己创建组件,而且考虑一下,如果组件是在远程的机器上,你还能new出一个对象吗?所以创建组件的责任交给了一个单独的对象,这个对象就是类厂。每个组件都必须有一个与之相关的类厂,这个类厂知道怎么样创建组件,当客户请求一个组件对象的实例时,实际上这个请求交给了类厂,由类厂创建组件实例,然后把实例指针交给客户程序。这个过程在跨进程及远程创建组件时特别有用,因为这时就不是一个简单的new操作就可以的了,它必须要经过调度,而这些复杂的操作都交给类厂对象去做了。IClassFactory最重要的一个函数就是CreateInstance,顾名思议就是创建组件实例,一般情况下我们不会直接调用它,API函数都为我们封装好它了,只有某些特殊情况下才会由我们自己来调用它,这也是VC编写COM 组件的好处,使我们有了更多的控制机会,而VB给我们这样的机会则是太少太少了。 IDispatch叫做调度接口。它的作用何在呢?这个世上除了C++还有很多别的语言,比如VB、VJ、VBScript、JavaScript等等。可以这么说,如果这世上没有这么多乱七八糟的语言,那就不会有IDispatch。:-) 我们知道COM组件是C++类,是靠虚函数表来调用函数的,对于VC来说毫无问题,这本来就是针对C++而设计的,以前VB不行,现在VB也可以用指针了,也可以通过VTable来调用函数了,VJ也可以,但还是有些语言不行,那就是脚本语言,典型的如VBScript、JavaScript。不行的原因在于它们并不支持指针,连指针都不能用还怎么用多态性啊,还怎么调这些虚函数啊。唉,没办法,也不能置这些脚本语言于不顾吧,现在网页上用的都是这些脚本语言,而分布式应用也是COM组件的一个主要市场,它不得不被这些脚本语言所调用,既然虚函数表的方式行不通,我们只能另寻他法了。时势造英雄,IDispatch应运而生。:-) 调度接口把每一个函数每一个属性都编上号,客户程序要调用这些函数属性的时侯就把这些编号传给IDispatch接口就行了,IDispatch再根据这些编号调用相应的函数,仅此而已。当然实际的过程远比这复杂,仅给一个编号就能让别人知道怎么调用一个函数那不是天方夜潭吗,你总得让别人知道你要调用的函数要带什么参数,参数类型什么以及返回什么东西吧,而要以一种统一的方式来处理这些问题是件很头疼的事。IDispatch接口的主要函数是Invoke,客户程序都调用它,然后Invoke再调用相应的函数,如果看一看MS的类库里实现Invoke的代码就会惊叹它实现的复杂了,因为你必须考虑各种参数类型的情况,所幸我们不需要自己来做这件事,而且可能永远也没这样的机会。:-) //////////////////////////////////////////////////////////////////////////////// 本文所用的程序框架均为对话框模式的MFC EXE工程。在编程前,首先要确定待操作的代码组件是否已经在系统中注册。如果代码组件没有注册,可以通过Windows"System目录下的regsvr32. exe程序对其进行注册。

COM组件教程

步骤1:创建项目 Visual Studio .NET 2003 本教程将带领您逐步骤通过一个非属性化ATL 项目,该项目创建一个显示多边形的ActiveX 对象。此对象包括使用户得以更改组成多边形的边数的选项以及刷新显示的代码。 注意本教程创建与Polygon(多边形)示例相同的源代码。如果您希望避免手动输入源代码,则可以从多边形示例摘要下载源代码。然后,您可以一边参考Polygon 源代码一边阅读教程,或者用它来检查自己的项目中是否有错误。 使用“ATL 项目向导”创建初始ATL 项目 1.在Visual Studio 开发环境中,在“文件”菜单上单击“新建”,然后单击“项目”。 2.单击“Visual C++ 项目”文件夹并选择“ATL 项目”。 3.键入Polygon作为项目名称: 源代码的位置通常默认为My Documents\Visual Studio Projects,并且将自动创建一个新 文件夹。 4.单击“确定”,“ATL 项目向导”随即打开。 5.单击“应用程序设置”以查看可用选项:

6.在创建控件时,如果控件必须是进程内服务器,则将“服务器类型”保留为DLL。 7.本教程中将不使用属性,因此请确保没有选中“属性化”复选框。 8.将其他选项保留在它们的默认值,然后单击“完成”。 “ATL 项目向导”将通过生成若干个文件来创建项目。可以通过展开Polygon 对象在解决方案资源管理器中查看这些文件。下面列出了这些文件。

在下一步骤中,您将向项目添加控件。 步骤2:添加控件 Visual Studio .NET 2003 在此步骤中,您将向项目添加控件,生成此控件,并在Web 页中对其进行测试。向ATL 项目添加对象 1.在“类视图”中,右击“Polygon”项目。 2.指向快捷菜单上的“添加”,然后单击“添加类”。 即会出现“添加类”对话框。左侧的树结构中列出了不同的对象类别: 3.展开树结构并单击“ATL”文件夹。

COM组件简介

COM组件简介 面向对象的思想难以适应这种分布式软件模型,于是组件化程序设计思想得到了迅速的发展。 按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。 为了实现这样的应用软件,组建程序和组建程序之间需要一些极为细致的规范,只有组件程序遵守了这些共同的规范,然间系统才能正常运行。 为此,OMG和Microsoft分别提出了CORBA(Common Object Request Breaker Architecture)和COM(Component Object m odel)标准,目前CORBA模型主要应用于UNIX 操作系统平台上,而COM 则主要应用于Microsoft Windows操作系统平台上。 在COM标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库(DLL), 被称为进程内组件(in-of-process com ponent)也可以是一个可执行程序(EXE),被称为进程外组件(out-of-process component). COM对象是建立在二进制可执行代码级的基础上,而C++等语言中的对象是建立在源代码级基础上的,因此COM对象是语言无关的。这一特性使用不同编程语言开发的组件对象进行交互成为可能。 在Microsoft Windows系统平台上,COM技术被应用于系统的各个层次,从底层的COM对象管理到上层的应用程序交互都用到了COM标准。 概述 COM既提出了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交互的规范不依赖于任何特定的语言,所以COM也可以是不同语言协作开发的一种标准。 OLE技术以COM规范为基础,OLE充分发挥了COM标准的优势,使Windows操作系统上的应用程序具有极强的可交互性。如果没有OLE的支持,Windows操作系统则会逊色很多。 但是,COM规范并不局限于OLE技术,实际上,OLE技术只是COM的一个应用而已,这几年,OLE技术在进行网络互连是显示出了很大的局限性,而COM则表现出了极强的适应能力。 COM标准包括规范和实现两大部分,规范部分定义了组件和组件之间通信的机制,这些规范不

mscom控件详解(龚建伟)

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm 控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。 1.MSComm控件两种处理通讯的方式 MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。 1.1 事件驱动方式 事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm 控件。 1.2 查询方式 查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。 2.MSComm 控件的常用属性 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。 CommPort 设置并返回通讯端口号。 Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。 PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。 Input 从接收缓冲区返回和删除字符。 Output 向传输缓冲区写一个字符串。 下面分别描述: CommPort属性设置并返回通讯端口号。 语法https://www.docsj.com/doc/b58496061.html,mPort[value ] (value 一整型值,说明端口号。) 说明在设计时,value 可以设置成从 1 到16 的任何数(缺省值为1)。但是如果用PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误68(设备无效)。注意:必须在打开端口之前设置CommPort 属性。 RThreshold 属性:在MSComm 控件设置CommEvent 属性为comEvReceive 并产生OnComm 之前,设置并返回的要接收的字符数。 语法object.Rthreshold [ = value ](value 整型表达式,说明在产生OnComm 事件之前要接

C#控件介绍及用法(详细版)

C#其实很好学,只要你弄清楚控件。 控件 控件是视窗交互的工具。控件是一种特殊的类,所有控件都继承自System.Windows.Forms.Control类。这里Control就叫做控件的基类,控件就是Control的派生类。一个类从基类继承,就拥有基类的所有成员(包括:变量(亦称字段),属性,函数(函数亦称方法),事件,运算符)。类之间通过继承关系保证了派生类拥有需要的方法或字段。所以Control的成员就是控件的通性。这里列出了Control

https://www.docsj.com/doc/b58496061.html,/zh-cn/library/system.windows.forms.control_members.aspx 静态文本控件Label: 表示控件的文本标签,并提供对访问键的支持。 它是最简单的控件,用于显示文字,其实它不一定是静态的,显示的文字可以随时通过Text属性更改。常用的属性是Font、BackColor、ForeColor、Text、Location、Size、Visible。 超链接文本控件LinkLabel: Windows 窗体LinkLabel控件使您能够向Windows 窗体应用程序添加Web 样式的链接。一切可以使用Label控件的地方都可以使用LinkLabel控件;还可以将文本的一部分设置为指向某个对象或网页的链接。 与Label类似,提供了类似超链接的文字样式,Label也可以设置Click事件,但LinkLabel更容易让人发现它被单击有不同的作用(由于它像超链接的样子)。也可以用作选项,【例】: ?新建工程,设计界面如图: ?修改LinkLabel控件名字:linkOption ?选择 ?修改(Name)属性 ?改为linkOption ?P.S.以后就用linkOption表示这个控件,在C#代码中控件实例实质上是一个变量,变量类型就是控件的类。这就是这个控件的变量名。由于默认的名称linkLabel1没有实际意义,编程时通常先修改其名字,使其好记。由于是变量名所以 命名规则与普通变量没有区别,由“_”或英文字母开头都是合法的,不允许重名。但通常许多控件共同运作来完成一 件具体的事,所以通常习惯在控件前面加上小写的类型简称,后跟首字母大写的名称。这是一条基本技巧,以后不

COM组件介绍

面向对象的思想难以适应分布式软件模型,于是组件化程序设计思想得到了迅速的发展。按照组件化的程序设计的思想,复杂的应用程序被设计成一些小的,功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不同的机器上。 为了实现这样的应用软件,组建程序和组建程序之间需要一些极为细致的规范,只有组件程序遵守了这些共同的规范,然间系统才能正常运行。 为此,OMG和Microsoft分别提出了CORBA(Common Object Request Breaker Architecture)和COM(Component Object model)标准,目前CORBA模型主要应用于UNIX操作系统平台上,而COM 则主要应用于Microsoft Windows操作系统平台上。 在COM标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库(DLL), 被称为进程内组件(in-of-process component)也可以是一个可执行程序(EXE),被称为进程外组件(out-of-process component). COM对象是建立在二进制可执行代码级的基础上,而C++等语言中的对象是建立在源代码级基础上的,因此COM对象是语言无关的。这一特性使用不同编程语言开发的组件对象进行交互成为可能。 在Microsoft Windows系统平台上,COM技术被应用于系统的各个层次,从底层的COM对象管理到上层的应用程序交互都用到了COM标准。 概述 COM既提出了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交 互的规范不依赖于任何特定的语言,所以COM也可以是不同语言协作开发的一种标准。 OLE技术以COM规范为基础,OLE充分发挥了COM标准的优势,使Windows操作系统上的应用程序具有极强的可交互性。如果没有OLE的支持,Windows操作系统则会逊色很多。 但是,COM规范并不局限于OLE技术,实际上,OLE技术只是COM的一个应用而已,这几年,OLE技术在进行网络互连是显示出了很大的局限性,而COM则表现出了极强的适应能力。 COM标准包括规范和实现两大部分,规范部分定义了组件和组件之间通信的机制,这些规范不依赖于任何特定的语言和操作系统,只要按照该规范,任何语言都可以使用; COM标准的实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。 COM是面对对象的软件模型,因而对象是他的基本要素之一。类似于C++中对象的概念,对象是某个类(class)的一个实例;而类则是一组相关的数据和功能组和在一起的一个定义。使用对象的应用(或另一个对象)成为客户,有时也成为对象的用户。 接口是一组逻辑上相关的函数集合,其函数也被称为接口成员函数。对象通过接口成员函数为客户提供各种形式的服务。 在COM模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。每一个接口都由一个128位的全局唯一标识符(GUID,Globally Unique Identifier)来标识。客户通过GUID获得接口的指针,在通过接口指针,客户就可以调用其相应的成员函数。

相关文档