注册C# 生成的COM组件?

注册C# 生成的COM组件?,第1张

要想用.NET开发组件动态链接库,并将类和资源公开以服务于其他任何编程语言,需要在项目中做以下设置:

1、创建一个类库项目/解决方案(此例TestCom),打开项目属性

2、选择“应用程序”选项卡,点击“程序集信息”按钮以打开程序集信息对话框

此处也可维护程序集名称和命名空间

3、在程序集对话框中勾选“使程序集COM可见”,然后确定。

此处也可维护项目版本信息和GUID,当GUID有冲突时可以通过VS的“工具”菜单中点击“创建GUID”来获取,一般为默认。

4、选择“生成”选项卡,勾选“为COM互 *** 作注册”。

如需要同时将注释与DLL一起分享出去,以方便其他程序员了解你的DLL接口和说明,则勾选“XML 文档文件”,如此生成项目时会将项目中所有注释生成一个XML文档。

需要注意的是,该配置是独立的,也可以将配置项设置为“所有配置”。

5、选择“签名”选项卡,勾选“为程序集签名”,然后点击新建,打开“创建强名称密钥“窗口。

6、维护密钥文件名,然后确认。

如果需要防反编译,则勾选密码保护密钥文件,然后设置密码(不设置密码不影响DLL注册到系统)。

7、DLL注册

每次编译之后都要重新注册一次,以更新注册信息,VS2019在生成(编译)项目之后会自动注册,这点非常方便。而VS2010及以前的版本需要手工 *** 纵(其他版本没用过)。

VS2010 注册步骤:

为了方便 *** 作,搜索到regasm.exe,将其复制到DLL所在文件夹,然后按WIN+R键后输入CMD打开命令窗口,

用CD命令定位到DLL所在文件夹输入以下命令:

Regasm <项目名称>.dll /tlb:  <项目名称>.tlb /codebase

其中<项目名称>替换为你的项目名称,也可以将命令编辑到BAT文件,这样每次编译之后执行bat即可。

到此为止大功告成,VBA中或其他编程环境就可以调用C#开发的组件对象了。

8、编写类和接口代码

要让组件中的所有需要公开的资源可见,必须为其创建接口。 见图例

示例中定义了一个Class1的类,该类只有一个方法Link,用于拼接字符串,为了公开此类和方法,必须再定义一个接口。

(定义接口时有个简单的方法,当你调试好类代码之后,复制整个类代码,然后将Class关键词改为interface,然后去掉所有方法的修饰词public以及实体代码并补一个分号。)

最后生成完成编译,编译之后需要注册以更新(VS2019会自动注册)。

这里要说明的是,几番测试发现,VS2019中不定义接口也能调用,只是无法使用点 *** 作符显示方法/属性列表。

9、 Excel VBA中调用组件。

按alt+F11打开你的VBA项目,然后从菜单中打开引用,滚动到 TestCom(或者是你的组件名)并勾选,如果没找到回到VS检查项目属性是否设置正确。

10、      在模块中调用类库。

懒得编辑插图了,见我的博客园文章

C#组件项目设置与开发应用范例

方法/步骤

首先我们新建一个工程,随便你,这个工程没有版本的分别,所以你建2.0或4.0都没所谓

在左侧的工具栏中拖入webbrowser控件

然后鼠标单击选上这个控件

在属性窗口找到ScriptErrorsSuppressed,选择"true",这个选择的意思是,如果网页上有出现错误命令,这个错误提示将被抑制

现在到项目管理那里,在项目上右击,选择"属性"

在设置面版上选择"程序集信息"

勾选上"使程序集com可见",这个选择其实是让浏览器的javascript能找找到"external"对象,如果不明白,那不用理它,涉及浏览器的东西太复杂,你知道该这么用就OK了

经过这两个设置以后,你的浏览器绝对不会再出现语法错误 的提示,不过如果是页面的d出信息,你还是可能收到的,不过没事,至少在做模拟登录,模拟点击上,你已经不愁了

创建工程环境

有了以上的框架技术基础,我们就可以来创建我们的第一个Outlook插件项目了,因为我现在用的是Office 2013,我们先做一个简单的Outlook 2013插件好了。其实这个插件2010也能用,因为插件UI是用Ribbon。

我们先用“管理员身份”运行Visual Studio。因为我们开发的是一个COM类型的类库,而这个类库需要向注册表注入一些键值,VS需要管理员身份才能自动完成这些 *** 作。你问怎么用管理员身份运行?在图标上右键点击,展开的菜单里面就有。

然后我们创建一个“类库”项目,我们起个项目名称叫“TestOutlookAddin”,记得.NET的版本是3.5。随后我们添加NetOffice相应3.5版本的以下dll文件引用:

extensibility.dll

NetOffice.dll

OfficeApi.dll

OutlookApi.dll

我们再调整解决方案的编译环境,必须要有x86和x64两种。因为插件是对Office版本敏感的,x64的Office只能加载x64编译得到的插件dll,同样的,x86版本Office也只能加载x86版本dll。

我们还要对项目进行属性设置。

在“应用程序”标签页中,点击“程序集信息…”,在打开的对话框中勾选“使程序集COM可见”。

在“生成”标签页中,勾选“为COM互 *** 作注册”。

在“调试”标签页中,将“启动 *** 作”勾选“启动外部程序”,并且填入你机器上的Outlook.exe启动路径,在我的机器上,路径如下:

C:\Program Files\Microsoft Office\Office15\OUTLOOK.EXE

修改完这个以后,我们先进入C:\Program Files\Microsoft Office\Office15\,也就是Outlook.exe的所在文件夹,看看有没有outlook.exe.config文件。如果没有这个文件,请创建这个文件,并在文件里面写入以下XML

xml version="1.0" encoding="utf-8"?>

<configuration>

<startup>

<supportedRuntime version="v1.0.3705" />

<supportedRuntime version="v1.1.4322" />

<supportedRuntime version="v2.0.50727" />

startup>

configuration>

这个文件必须和Outlook.exe在同一个文件夹中。如果没有这个文件,我们将无法进入调试状态。我想没有人能在不调试的情况下编写一整个插件吧?

编写样例代码

我们把环境的装备工作做好了,下面就来编写最简单的插件。

我们先在项目中创建一个RibbonUI.xml,并把它的生成 *** 作定义为“嵌入的资源”,内容如下:

xml version="1.0" encoding="utf-8" ?>

<customUI onLoad="LoadAction" xmlns="http://schemas.microsoft.com/office/2006/01/customui" >

<ribbon>

<tabs>

<tab id="RibbonAddinSampleTabCS35" label="插件标签">

<group id="group1" label="分组名">

<button id="customButton1" size="large" label="按钮"/>

group>

tab>

tabs>

ribbon>

customUI>

对于Outlook 2007以上的版本来说,这个文件就是定义新增的菜单栏界面的。

然后再在项目中创建一个名为COMEntry的类,代码如下:

using System.Runtime.InteropServices

using NetOffice.OutlookApi.Tools

using NetOffice.Tools

namespace TestOutlookAddin

{

[COMAddin("Test Addin For Outlook", "", 3), CustomUI("TestOutlookAddin.RibbonUI.xml"), RegistryLocation(RegistrySaveLocation.CurrentUser)]

[Guid("AFE67651-951D-4A42-8CAB-E9BF7E219DDF"), ProgId("TestAddinForOutlook")]

public class COMEntry : COMAddin

{

}

}

其中COMAddin特性类声明了一系列需要加载和插件初始化的信 息,它的参数有“插件在Outlook插件列表中的显示名称”,“插件在列表中的描述”,“启动类型(3代表跟随Outlook启动而自动启动)”。

CustomUI表示了刚才我们定义的RibbonUI.xml作为嵌入的资源的资源访问路径,这点对于有一定经验的.NET开发人员一定不陌生。

RegistryLocation是定义了插件在注册表中注册到哪个根键值里面去。我们知道现在Windows安装文件都有“仅为我”和“所有人”安装选项,这个特性也是为了区分它的。不过这个仅仅是在调试状态下,因为发布的时候这个键值还是会由我们的安装包来自行控制,所以不需要在这个地方做过多纠结。

好了,我们在VS按下F5调试查看一下效果吧

我们得到了一个新的标签,标签内部有个新的分组和空白的“按钮”,鼠标移到按钮上,就会自动出现下面的d出说明框。

在此,需要先进行一个声明,下方的这个d出说明框是可以自定义标题和内容的,但是最下方的插件名称超链接和“详细信息”是无法去掉的。微软官方的解释是:为了区分这个到底是一个第三方插件还是Outlook自身自带的按钮。因为他们担心一些质量很差的插件影响了Outlook自身的行为,用户还要怪罪到微软头上。因此他们就用这种方法来明显区别插件和自身控件了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7791923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存