COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们能够开发出各类各样的功能专注的组件,而后将它们按照须要组合起来,构成复杂的应用系统。网络
COM组件的优势:函数
①能够将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;工具
②能够在多个应用系统中重复利用同一个组件;ui
③能够方便的将应用系统扩展到网络环境下;spa
④COM组件的特性是与语言无关和与平台无关的(最重要的特性)。COM能够被各类不一样的语言如Java,C#, PB,VB,Delphi等调用。3d
.NET(C#)建立的COM组件在VB6.0和VC6.0中以COM组件形式调用,调用“*.tlb”文件;而在VB.NET 和C#中应以.NET程序集形式调用,调用时,直接引用“*.dll”文件便可。orm
一、建立C#类库,名称为CLCOMTestInCSharp,以下图对象
二、在“解决方案资源管理器”(CTRL+W,S)中,类“Class1.cs”改名为“CAdd.cs”,并在弹出的对话框选项中选择“是”。以下图blog
三、添加接口“IAdd”,并使类“CAdd”继承接口“IAdd”,代码以下继承
namespace CLCOMTestInCSharp
{
public interface IAdd
{
/// <summary>
/// 加法运算
/// </summary>
/// <param name="num1">整数1</param>
/// <param name="num2">整数2</param>
/// <returns>返回两数字之和</returns>
int Add(int num1, int num2);
}
public class CAdd:IAdd
{
/// <summary>
/// 构造函数
/// </summary>
public CAdd()
{ }
/// <summary>
/// 加法运算
/// </summary>
/// <param name="num1">整数1</param>
/// <param name="num2">整数2</param>
/// <returns>返回两数字之和</returns>
public int Add(int num1, int num2)
{
return num1 + num2;
}
}
}
四、文档最上方添加命名空间“System.Runtime.InteropServices”的引用语句。
using System.Runtime.InteropServices;
五、经过菜单“工具”“建立GUID”建立GUID,以下图
六、“IAdd”接口上方使用该GUID,以下:
[Guid("058B0D56-360E-489c-BF19-567BEBF74C82")]
public interface IAdd
七、一样的方法在类“CAdd”的上方再生成添加一个GUID
[Guid("C6926C48-02CC-44db-8C07-B70F4E11F300")]//类GUID
[ClassInterface(ClassInterfaceType.None)]//不为类生成类接口
public class CAdd:IAdd
八、完整代码以下图
九、打开“解决方案资源管理器”,打开“AssemblyInfo.cs”,将[assembly: ComVisible(false)]设为true。
十、右击该类库项目,选择“属性”“生成”,将“为COM互操做注册”选中。如图
十一、右击项目,“生成”。将生成“CLCOMTestInCSharp.dll”、“CLCOMTestInCSharp.tlb”、“CLCOMTestInCSharp.pdb”三个文件
一、在VB6.0中新建工程“标准EXE”。在窗体上添加一个“CommandButton”控件,并将其Caption属性设为“VB6.0调用C#写的COM组件”
二、在工程引用中选择“CLCOMTestInCSharp”,以下图
三、双击“CommandButton”,为其添加以下代码
Private Sub Command1_Click()
Dim add As CAdd '定义类Add的对象
Set add = New CAdd
Dim num1, num2, num3 As Long '定义变量
num1 = 1
num2 = 2
num3 = 0
num3 = add.add(num1, num2) 'COM组件调用
MsgBox "1+2=" & num3
Set add = Nothing '
End Sub
注意:C#中的int类型,转化到VB中变为long类型
四、执行程序。结果以下图:
一、新建“MFC AppWizard(exe)”的“基本对话框”工程。并在窗体上添加一个按钮,将其标题设为“使用VC6.0调用C#写的COM组件”
二、将用C#生成的组件“CLCOMTestInCSharp.tlb”拷贝到VC的工程目录和生成目录。
三、添加引用
#import "CLCOMTestInCSharp.tlb"
using namespace CLCOMTestInCSharp;
四、为按钮添加以下代码
long num1,num2,num3;//定义变量
num1=1,num2=2,num3=0;
CoInitialize(NULL);
IAddPtr p_Add(__uuidof(CAdd));
num3 = p_Add->Add(num1,num2);
p_Add.Release();
p_Add = NULL;
CoUninitialize();
CString strTemp;
strTemp.Format("%ld",num3);
MessageBox("1+2="+strTemp);
注意:C#中的int类型,转化到VC中变为long类型
五、运行结果,以下图:
一、使用VB.NET建立“Windows 窗体应用程序”项目,命名为“COMTest”。
二、在窗体上添加一个Button,并将其Text属性设为“使用VB.NET调用C#建立的COM组件”
三、将“CLCOMTestInCSharp.dll”复制到程序目录,添加引用,选择“浏览”,以下图
四、双击“Button”按钮,添加以下代码
Dim add As CLCOMTestInCSharp.CAdd '添加CAdd类的对象
add = New CLCOMTestInCSharp.CAdd
Dim num1, num2, num3 As Integer '定义变量
num1 = 1
num2 = 2
num3 = 0
num3 = add.Add(num1, num2) '调用COM组件
add = Nothing
MessageBox.Show("1+2=" & num3.ToString()) '消息显示结果
五、执行程序,结果以下图所示
一、建立“Windows 窗体应用程序”,并命名为“COMTest”
二、在窗体上添加一个Button,并将其Text属性设为“使用C#调用C#建立的COM组件”
三、将“CLCOMTestInCSharp.dll”复制到程序目录,添加引用,选择“浏览”
四、双击Button为其添加以下代码。
private void button1_Click(object sender, EventArgs e)
{
CLCOMTestInCSharp.CAdd add = new CLCOMTestInCSharp.CAdd();//定义Add类的对象
int num1, num2, num3;//定义变量
num1 = 1; num2 = 2; num3 = 0;//变量初始化
num3 = add.Add(num1, num2);//调用COM
MessageBox.Show("1+2="+num3.ToString());//使用消息显示结果
}
五、执行程序,结果略。