C#调用ATL COM

来源:互联网 发布:简单企业网站源码 编辑:程序博客网 时间:2024/05/16 06:40

来源:http://blog.csdn.net/clever101

     

             简单介绍C#程序如何调用ATL编写的COM组件。

 

首先新建一个ATL工程,具体如下:

1. 填写工程名称和路径,如下图:    

2. 选择工程的服务器类型为动态链接库,如下图:

3. 添加一个ATL简单对象,如下图:

4. 填写类名称,如下图:

5. 选择类的线程模型及其它属性,如下图:

6. 为接口类添加一个方法,如下图:

7. 填写方法名及输入输出参数,如下图:

8. 设置IDL接口属性,这里采用默认设置即可,如下图:

为刚才新建的Add方法添加代码,具体如下:

[cpp] view plaincopy
  1. STDMETHODIMP CMathCalc::Add(LONG Num1, LONG Num2, LONG* Ret)  
  2. {  
  3.     // TODO: 在此添加实现代码  
  4.     assert(NULL!=Ret);  
  5.     *Ret = Num1+Num2;  
  6.   
  7.     return S_OK;  
  8. }  

     然后编译工程,生成一个dll形式的COM。

 

第二步新建一个C#控制台测试工程,具体如下:

1. 填写控制台工程名称及路径,如下图:

2. 添加一个新的库引用,如下图:

3. 选择刚才新生成的COM——MathCom 1.0类型库,如下图:

4. Program.cs中添加如下代码:

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using MathComLib; // 注意使用命名空间  
  6.   
  7. namespace TestMathCom  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             int a = 2;  
  14.             int b = 3;  
  15.             int lRetVal = 0;  
  16.             MathCalc MyMathCalc = new MathCalc();  
  17.             MyMathCalc.Add(a, b,out lRetVal); // 注意这里有一个out关键字  
  18.             System.Console.Write(lRetVal.ToString());  
  19.             System.Console.WriteLine("\nPress Enter to continue.");  
  20.             System.Console.ReadLine();  
  21.         }  
  22.     }  
  23. }  

 

效果图如下:

 

      

问题:

1.C#调用COM接口,在参数类型中必须是C#的int类型而不是long类型对应COM的long类型,为什么呢?

0 0
原创粉丝点击