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,一经查实,立即删除!

相关文章

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

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

纠结

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

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…

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

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

STM32和Arduino对比,谁更厉害?

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

人大计算机在职考研好考吗,人大在职研究生好考吗?通过率高吗?

答&#xff1a;最近咨询人大在职研究生进行学习的人非常多&#xff0c;其中咨询最多的问题是考试难度及通过率。下面就通过在职研究生招生信息网为大家介绍一下&#xff0c;人大在职研究生好考吗?通过率高吗?人大在职研究生招生是采用同等学力申硕的方式&#xff0c;该方式是…

可能你还不懂浮点数

在网上看到一个问题然后看到这篇关于浮点数的文章&#xff0c;希望大家看了之后有所启发想一下&#xff0c;为什么第一个打印的和预设值不同&#xff0c;但是第二个是相同的&#xff1f;如图&#xff1a;尾数部分是如何转变成二进制的&#xff1f;前言很多人在初学写程式时都会…

RTP协议的封装

最近一段时间学习了RTP协议相关的内容&#xff0c;一方面为了将自己学到的部分记录下来&#xff0c;便于后续查找&#xff0c;另一方面用于记录笔记 一个协议的封装是为了满足协议的功能需求的。从前面提出的功能需求&#xff0c;可以推测出RTP封装中应该有同步源和时戳等字段&…

Alpha冲刺(7/10)

团队信息 队名&#xff1a;爸爸饿了组长博客&#xff1a;here作业博客&#xff1a;here组员情况 组员1&#xff08;组长&#xff09;&#xff1a;王彬 过去两天完成了哪些任务 学会了POSTMAN的使用&#xff0c;对后端已经完成的接口进行了收发消息正确性的验证推进项目进度&…

epoll模型之服务器设计

Linux2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用&#xff0c;即比较多的用到select函数。1、为什么select落后首先&#xff0c;在Linux内核中&#xff0c;select所用到的FD_SET是有限的&#xff0c;即内核中有个参数__FD_SETSIZE…

不限学历、不限学校、华为天才少年招聘

我在前同事的朋友圈看到的招聘信息。不限学历&#xff0c;不限学校我相信这个规则一定会让后续的很多企业效仿&#xff0c;工作至今&#xff0c;遇到很多能力很强但是学历一般的人&#xff0c;而对于面试者&#xff0c;可以大胆的说出那句话&#xff0c;人家华为都不限制学校学…

linux学习第九天 (Linux就该这么学)

今天讲了raid0 至少两块盘串联在一起&#xff0c;读写性能提升&#xff0c;但不具备数据备份和错误修复能力&#xff0c;RAID1把两块盘绑定&#xff0c;在写入数据时&#xff0c;同时写入到多块硬盘设备&#xff0c;raid5推荐使用&#xff0c;10推荐使用 LVM,今天是在外面加班…

[Windows Phone] 为应用添加后台计划任务 – Scheduled Task Agent

前段时间做过一个天气应用&#xff0c;一直是只支持前台获取数据&#xff0c;上周末参加了Windows Phone的CodeJam和高手们交流了一下&#xff0c;发现实现后台定时更新功能也不是很难&#xff0c;于是在网上找一些资料&#xff0c;在找资料的过程中发现&#xff0c;网上的一些…

全能终端神器MobaXterm

摘要&#xff1a;现今软件市场上有很多终端工具&#xff0c;比如&#xff1a;secureCRT、Putty等等。secureCRT其实也是一款很强大的终端工具&#xff0c;但它是收费软件&#xff0c;一般公司不允许使用。Putty&#xff0c;非常小巧&#xff0c;免费软件&#xff0c;但是不支持…

入群问的这道C题目,还没人答对

最近好几个同学加我微信&#xff0c;让我帮忙拉他入群&#xff0c;然后我就随手问了个题目&#xff0c;如下上面回答的答案都是不正确的sizeof是 C语言的关键字&#xff0c;这个关键字是用来计算传入参数占用的内存字节数。比如#include <stdio.h> int main() {int a 1;…

常见单元测试工具介绍

1. C/C语言开发的首选利器- CTest 以前在windows平台下的开发&#xff0c;使用的框架主要是MFC&#xff0c;以及console工程&#xff08;基于win32SDK&#xff09;&#xff0c;属于纯C/C开发的范畴。 因此&#xff0c;使用的单元测试工具&#xff0c;主要有CTest和CppUni…

win10系统的服务器在哪里设置密码,window10怎么设置密码

window10怎么设置密码Windows 10 系统中可以用自己喜欢的图片结合手势来设置登陆密码&#xff0c;很酷很有个性&#xff0c;如何操作呢&#xff1f;1、从开始菜单中打开“设置”应用(也可以通过其他的方式打开“设置”应用&#xff1b;从通知中心打开&#xff1b;从搜索框中搜索…

Linux 启动优化实战-2.41 秒启动应用!

系统启动是一个大问题&#xff0c;前段时间有同学也问了我这个问题&#xff0c;不仅仅是Linux&#xff0c;Android 下面的启动优化也可以借助bootchar来分析。下面正文是老吴的实操过程。哦&#xff0c;对了&#xff0c;上篇文章有同学问文章的封面&#xff0c;这里贴出来&…

腾达fh307没有显示服务器名,腾达(Tenda)FH307路由器上网设置 | 192路由网

本文介绍了腾达(Tenda)FH307路由器的安装、上网设置方法&#xff0c;同时分别介绍了“ADSL(PPPOE)拨号”、“动态IP”、“静态IP”三种上网方式的区别&#xff0c;以及在腾达(Tenda)FH307路由器上的详细设置。腾达(Tenda)FH307无线路由器一台新购买的腾达FH307路由器实现上网&a…