OOB与COM交互读写本地文件

相信读过前几篇Silverlight Out of Browser实例教程的朋友已经对Silverlight的OOB应用有了一定的认识和了解。今天,我们将讨论Silverlight Out of Browser的另外一个功能实例,Silverlight OOB与COM API的交互操作。
在开始实例之前,我们先了解一些基本的概念。
首先说说什么是COM?
这里我不想过多篇幅的讨论COM和COM+,在微软MSDN对COM技术有详细的解释,有兴趣的可以看看。这里我们只是对COM进行一个简单的描述。所谓COM也就是Componet Object Model,中文称为组件对象模型,通常被用于创建可复用软件组件。在微软的产品中,许多应用都提供了COM接口供开发人员调用。其中较为典型的是Office系列的COM接口。
对于COM和COM+的专业定义,COM是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。 而COM+可以称为COM的一个升级版本,其底层结构仍然以COM为基础,它几乎包容了COM的所有内容,COM+综合了COM、DCOM和MTS这些技术要素,它把COM组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系统,因此,COM+与操作系统的结合更加紧密。值得注意的是COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现。
Silverlight 4对COM的支持
早期的Silverlight开发人员都知道,Silverlight作为客户端技术,无法执行权限较高的操作,例如读写本地磁盘,执行本地命令等。Silverlight 4的发布,增加对COM的支持,允许Silverlight在OOB信任应用下,对COM API进行互操作,该功能提高了Silverlight的功能,是其应用如同Windows应用一样,轻松操作Windows API。这里请大家注意,微软给出的建议,Silverlight 4对于COM的支持,仅限于Windows操作系统的COM组件,暂时不能支持用户自定义创建的COM组件,这是目前存在的局限性,不过相信随后的Silverlight版本,会解决这个问题。
Silverlight 4与COM交互技术基础
微软为开发人员提供了相关的API,使Silverlight 4和COM交互操作开发简单化。其要点如下:
在Silverlight 4测试版本中与COM交互类是使用ComAutomationFactory静态类,而在Silverlight 4正式版中,微软将ComAutomationFactory修改为AutomationFactory类。
AutomationFactory类是在System.Runtime.InteropServices.Automation命名空间下,提供四个方法和一个属性
 

ComAutomationFactory.CreateObject和ComAutomationFactory.GetObject用来创建COM实例。
 
ComAutomationFactory.GetEvent则是返回一个ComAutomationEvent实例,开发人员可以通过该方法激活相关事件。
ComAutomationFactory.IsAvailable属性将返回一个布尔型,确认该COM组件是否正在被调用。
最后CreateObject<T>()暂时没有任何作用。
其简单的用法:
  
 1 private dynamic outlook;
 2 
 3 private bool InitializeOutlook()
 4 {
 5     try
 6     {
 7         outlook = AutomationFactory.GetObject("Outlook.Application"); 
 8         return true;
 9     }
10     catch (Exception)
11     {
12         try
13         {
14             outlook = AutomationFactory.CreateObject("Outlook.Application");
15             outlook.Session.GetDefaultFolder(6 /* Inbox */).Display();
16             outlook.ActiveWindow.WindowState = 1
17             return true;
18         }
19         catch (Exception)
20         {
21             // 返回错误
22             return false;
23         }
24     }
25 }
在上面代码中,我们可以看到一个新的关键字"dynamic",该关键字是C# 4.0的新特性之一,其含义是允许声明一个动态类型的变量,在编译时,编译器允许我们调用任何方法和属性,不会出现异常报错,而在运行时会进行查找调用的方法和属性是否正常,如果方法或者属性存在,并且参数也正确,将会正常调用执行,反之,则返回Microsoft.CSharp.RuntimeBinder.RuntimeBinderException异常错误。对于dynamic关键字的详细解释和更多例程,推荐大家看看MSDN详细介绍。
在项目中使用dynamic关键字,需要添加新的引用"Microsoft.CSharp",
Silverlight 4与COM交互实例
相信读过上一篇的朋友都还记得,Silverlight 4默认的情况下仅能访问"My..."系列目录,例如“我的文档”,“我的音乐”,“我的图片”等。而使用COM API后,Silverlight 4将会突破该限制,允许应用访问本地任何磁盘和目录。
实例在本地任何磁盘和目录写文件和读文件操作
在本实例中,我们仍旧使用上一篇中的项目代码SilverlightOOBDemo,对其进行简单的修改。
说到本地文件读写操作,很多人都会想到FileSystemObject类,该类提供了简单而又全面的Windows文件操作方法,例如读文件,写文件,删文件,改文件,以及与之相同的目录操作。在MSDN中,有关于FSO所有的方法列表供大家参考。这里我们会用到CreateTextFile,WriteLine,OpenTextFile,ReadAll等方法实现Silverlight 4操作任何磁盘和目录写文件和读文件。
在项目中的ToolBar栏,添加新的操作按钮,
 1 <Button Width="56" Height="80" Style="{StaticResource BlackGlossyButton}" Margin="1,0,0,0" Foreground="White" x:Name="writeFileBtn" Click="writeFileBtn_Click">
 2      <Button.Content>
 3         <StackPanel>
 4             <Image VerticalAlignment="Top" HorizontalAlignment="Center" Source="/SilverlightOOBDemo;component/Images/Write.png" Margin="0,-5,0,0" Stretch="None" />
 5             <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,3,0,0" Text="写文件" TextWrapping="Wrap"/>
 6         </StackPanel>
 7      </Button.Content>
 8 </Button>
 9 
10 <Button Width="56" Height="80" Style="{StaticResource BlackGlossyButton}" Margin="1,0,0,0" Foreground="White" x:Name="readFileBtn" Click="readFileBtn_Click">
11      <Button.Content>
12         <StackPanel>
13             <Image VerticalAlignment="Top" HorizontalAlignment="Center" Source="/SilverlightOOBDemo;component/Images/Read.png" Margin="0,-5,0,0" Stretch="None" />
14             <TextBlock VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,3,0,0" Text="读文件" TextWrapping="Wrap"/>
15         </StackPanel>
16      </Button.Content>
17 </Button>
为了两个Button创建Click事件,writeFileBtn_Click和readFileBtn_Click。
写文件操作代码:
 1 private void writeFileBtn_Click(object sender, RoutedEventArgs e)
 2 {
 3     using (dynamic fsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject"))
 4     {
 5                 dynamic file = fsoCom.CreateTextFile(@"c:\test.txt"true);
 6                 file.WriteLine("Hello Silverlight 4.");
 7                 file.WriteLine("Silverlight写文件到C:\\");
 8                 file.Close();
 9     }
10 }
运行OOB应用,点击“写文件”按钮,FSO将在C盘创建test文本文件,其内容如下:
而读文件代码:
1 using (dynamic fsoCom = AutomationFactory.CreateObject("Scripting.FileSystemObject"))
2 {
3                 dynamic file = fsoCom.OpenTextFile(@"c:\test.txt"1true);
4                 tbResult.Text = file.ReadAll();
5                 file.Close();
6 }
其运行效果如下:
以上都是使用FSO最基础的文件操作API实现的,依次类推,可以很轻松操作本地文件和目录。
今天Silverlight实例教程暂时介绍到这里,下一篇我将继续介绍Silverlight OOB应用与Office应用的交互。
本篇源代码下载

转载于:https://www.cnblogs.com/kingdom_0/articles/2287196.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中遍历删除ArrayList中多个元素

Java中遍历删除ArrayList多个元素 Iterator itr list.iterator(); while(itr.hasNext()) {int i itr.next();if (i > 5) { // filter all ints bigger than 5itr.remove();} }

github生成SSH公钥

第一步&#xff1a;头像下面有个setting,进去 第二步&#xff1a;找到 SSH and GPG keys 这个目录&#xff0c;点击&#xff0c;右边有个 New SSH key&#xff0c;这里就是填写公钥的地方&#xff0c;那么公钥怎么生成呢&#xff1f; 第三步&#xff1a;终端输入 ssh-keygen…

oracle服务说明

注&#xff1a;SID - 数据库标识HOME_NAME - Oracle Home名称&#xff0c;如OraHome92、OraHome81&#xff08;1&#xff09;OracleServiceSID 数据库服务&#xff0c;这个服务会自动地启动和停止数据库。如果安装了一个数据库&#xff0c;它的缺省启动类型为自动。服务进程为O…

洛阳理工学院计算机类分数线,2010洛阳理工学院招生对口计算机吗?分数线大概是多少...

就上大学网为您推荐类似问题答案问题1&#xff1a;2010年唐山职业技术学院招收计算机对口分数线大概是多少&#xff1f;你的分数查不多&#xff0c;报第一纸鸢问题不大&#xff01;问题2&#xff1a;2010年河南省洛阳市理工学院大专录取分数线是多少&#xff1f;洛一高600分&am…

在Google工作的十年,也是我开心的十年

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;昨晚看到bug君发的这篇文章&#xff0c;文章的主人公在Google工作了10年&#xff0c;我认真看了文章里的每一个字&#xff0c;我特别羡慕这样的工作和环境&#xff0c;当然&#xff0c;我相信我们有一天也会是这样的&#x…

谈判高手子贡---引导“用户”的专家

谈判高手子贡---引导“用户”的专家Jack zhai子贡是孔子的弟子&#xff0c;但他更为让人乐道的是他出色的外交才能。子贡复姓端木&#xff0c;名赐&#xff0c;卫国人&#xff0c;思维敏捷&#xff0c;嘴皮上的功夫&#xff0c;绝对不亚于后来的苏秦与张仪。故事说的是公元前48…

流媒体传输协议系列之--RTSP协议详解

1. RTSP连接的建立过程 RTSPServer类用于构建一个RTSP服务器&#xff0c;该类同时在其内部定义了一个RTSPClientSession类&#xff0c;用于处理单独的客户会话。 首先创建RTSP服务器(具体实现类是DynamicRTSPServer)&#xff0c;在创建过程中&#xff0c;先建立Soc…

身份证明检索失败,如何解决?

今天遇到一个很奇怪的问题2台几乎完全一样的机器&#xff0c;连同一台ORACLE服务器&#xff0c;可是一台机上测试成功&#xff0c;另一台机器测试失败&#xff0c;神奇&#xff01;上网搜索了资料后发现问题&#xff0c;解决方法如下&#xff0c;本人已经实践证明下面的方法确实…

纠结

几年前&#xff0c;我一同事回家创业&#xff0c;当时我们一起做软件开发&#xff0c;他觉得上班没意思&#xff0c;就决定回老家创业&#xff0c;当时他创业的项目是零售项目&#xff0c;离职回去筹备了几个月&#xff0c;跟我们看到的创业老板一样&#xff0c;当时他也去挖了…

管理系统中计算机应用第二章,管理系统中计算机应用第二章.doc

管理系统中计算机应用第二章.doc第二章 企业管理的信息化平台一、单项选择题(本大题共30小题&#xff0c;每小题1分&#xff0c;共30分)1.从理论上分析&#xff0c;传统的IP地址(IPv4)最多可以访问的用户数是( )A.255*255*255*255   B.8*8*8*8   C.32*32*32*32   D.256*2…

更新了一个新版本的editplus 语法文件(for nagios)

从editplus上下载的nagios 语法文件,发现不支持nrpe.cfg 很多参数也没有 在它上面更新了一下,版权是原作者的 转载于:https://blog.51cto.com/yahoon/743633

RTSP的报文结构

RTSP的报文结构 RTSP是一种基于文本的协议&#xff0c;用CRLF作为一行的结束符。使用基于文本协议的好处在于我们可以随时在使用过程中的增加自定义的参数&#xff0c;也可以随便将协议包抓住很直观的进行分析。 RTSP有两类报文&#xff1a;请求报文和响应报文。请求报文是指从…

Qt性能优化,一位资深Qt工程师的经验

Qt是一个1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;比如控制台工具和服务器。Qt 支持的操作系统有很多&#xff0c;例如通用操作系统 Windows、Linux、Unix&#xff0c;智嵌入式系统 QN…

[引]生成加密和解密的密钥

1.对称密钥2.不对称密钥3.将非对称密钥存储在密钥容器中4.将非对称密钥存储在密钥容器中示例 创建和管理密钥是加密过程的一个重要部分。对称算法要求创建必须对不应解密数据的任何人保密的密钥和初始化向量 (IV)。不对称算法要求创建一个公钥和一个私钥。公钥可以对任何人公开…

centos7装单机hadoop2.7.3

&#xff08;1&#xff09;hadoop2.7.3下载(前提&#xff1a;先安装java环境)下载地址&#xff1a;http://hadoop.apache.org/releases.html&#xff08;注意是binary文件&#xff0c;source那个是源码&#xff09;&#xff08;2&#xff09;解压tar.gz &#xff08;3&#xff…

计算机指令称,通俗解释什么叫计算机指令?

实际上能接触到“计算机指令”的人&#xff0c;只是少数电脑工程师。现在一般的电脑程序员都已经无需使用计算机指令了&#xff0c;因为他们编程序已经使用高级的计算机语言了。下面我尽量用通俗的语言来试着解释。计算机由CPU、内存、硬盘、显示器和键盘等部件组成。计算机软件…

JAVA_Thread_deadlock

package com.kk.thread;/* * 本类演示死锁的形成 * 基本数据类型是不能作为同步块的参考,例:int b;synchronized(b)*/public class TicketsSystem {public static void main(String[] args)throws Exception { SellThread sellnew SellThread();new Thread(sell).start(…

STM32和Arduino对比,谁更厉害?

前两天有一个同学问我嵌入式的学习路线他是一个大三的学生&#xff0c;我看了他的简历&#xff0c;里面几乎没什么项目经验&#xff0c;对于企业来说这样的学生就好比一张白纸一样&#xff0c;当然&#xff0c;这样的学生很难拿到一份好的offer。学习路线的文章我记得已经发了很…

窗体中实现按 回车键 跳到下一个可选的TabIndex控件

Form中一“textbox”&#xff0c;两“button”,如何实现在textbox中按下回车响应button.click事件 &#xff1a;1)把按钮的tabindex依次设置&#xff0e;如btnSure 1 ,btnModify 2, textbox 5等// 把下面的代码放到窗体中可以实现按回车键跳到下一个可选的TabIndex控件:protec…

技术支持

iOS技术支持 有问题的可以留言。 邮箱地址&#xff1a;838086119qq.com 地址&#xff1a;上海市复旦软件园 谢谢! iOS program design & system consultation if you have any question, please contact me with no hesitate Email: 838086119qq.com Add: 2B05 of Fudan So…