C# COM组件开发之界面窗体 - 51CTO.COM

来源:百度文库 编辑:神马文学网 时间:2024/04/29 03:24:38
  • C# COM组件开发之界面窗体

  • http://developer.51cto.com  2009-09-22 17:53  佚名  itgrass  我要评论(0)
    这里我们将介绍C# COM组件开发之界面窗体,希望通过本文能让大家对C# COM组件开发有所了解。

    C# COM组件开发,我们这里将讲到的是界面窗体的开发。将从定义接口开始,再讲类的实现以及用Regasm 工具进行注册等等,希望对大家有所帮助。

    C# COM组件开发1,定义接口

    (1)在接口上方加上[Guid("1EA4DBF0-3C3B-11CF-810C-00AA00389B71")]

    (2)在每个方法上加上[DispId(i)]

            
    1. using System;  
    2. using System.Runtime.InteropServices;  
    3. namespace Leading.Mis.NewsMonitor  
    4. ......{  
    5.     /**//**//**////  
    6.     /// 消息监控接口的定义  
    7.     /// 
    8.  
    9.     [Guid("1EA4DBF0-3C3B-11CF-810C-00AA00389B71")]  
    10.     public interface INewsMonitor  
    11.     ......{  
    12.         发送文件时,记录发送者,接收者和发送的文件名发送文件时,记录发送者,接收者和发送的文件名#region 发送文件时,记录发送者,接收者和发送的文件名  
    13.         /**//**//**////  
    14.         /// 当发送文件时,记录发送者,接收者和发送的文件名  
    15.         /// 
    16.  
    17.         ///  name="strSendID">文件发送者 
    18.         ///  name="strTargetID">文件接受者 
    19.         ///  name="strFileName">文件名 
    20.      [DispId(1)]  
    21.         void SendFile(string strSendID,string strTargetID,string strFileName);  
    22.         #endregion  
    23.           
    24.         接收文件时,记录文件接收者,发送者和发送的文件名接收文件时,记录文件接收者,发送者和发送的文件名#region 接收文件时,记录文件接收者,发送者和发送的文件名  
    25.         /**//**//**////  
    26.         /// 接受文件时,记录文件接收者,发送者和发送的文件名  
    27.         /// 
    28.  
    29.         ///  name="strReceiveID">文件接收者 
    30.         ///  name="strSendID">文件发送者 
    31.         ///  name="strFileName">文件名 
    32.         [DispId(2)]  
    33.         void RecvFile(string strReceiveID,string strSendID,string strFileName);  
    34.         #endregion  
    35.           
    36.         文件发送成功后,记录发送者,接收者和发送的文件名文件发送成功后,记录发送者,接收者和发送的文件名#region 文件发送成功后,记录发送者,接收者和发送的文件名  
    37.         /**//**//**////  
    38.         /// 文件发送成功后,记录发送者,接收者和发送的文件名  
    39.         /// 
    40.  
    41.         ///  name="strSendID">文件发送者 
    42.         ///  name="strTargetID">文件接收者 
    43.         ///  name="strFileName">文件名 
    44.         [DispId(3)]  
    45.         void  FileSendOK(string strSendID,string strTargetID,string strFileName);  
    46.         #endregion  
    47.           
    48.         取消文件发送时,记录发送者,接收者和发送的文件名取消文件发送时,记录发送者,接收者和发送的文件名#region 取消文件发送时,记录发送者,接收者和发送的文件名  
    49.         /**//**//**////  
    50.         /// 取消文件发送时,记录发送者,接收者和发送的文件名  
    51.         /// 
    52.  
    53.         ///  name="strCancelID">取消文件发送者 
    54.         ///  name="strTargetID">文件发送对方 
    55.         ///  name="strFileName">文件名 
    56.         [DispId(4)]  
    57.         void FileSendCancel(string strCancelID,string strTargetID,string strFileName);  
    58.         #endregion  
    59.           
    60.     } // end interface INewsMonitor  
    61.       
    62. } //end namespace Leading.Mis.NewsMonitor 

    C# COM组件开发2,类的实现

    (1)在类的上方加上 [Guid("1EA4DBF0-3C3B-11CF-810C-00AA00389B71")]
    [ClassInterface(ClassInterfaceType.None)] 

            
    1. using System;  
    2. using System.IO;  
    3. using System.Runtime.InteropServices;  
    4.  
    5. namespace Leading.Mis.NewsMonitor  
    6. ......{  
    7.     /**//**//**////   
    8.     /// 消息监控类的实现  
    9.     /// 
    10.  
    11.     [Guid("1EA4DBF0-3C3B-11CF-810C-00AA00389B71")]  
    12.     [ClassInterface(ClassInterfaceType.None)]  
    13.     public class NewsMonitor : INewsMonitor  
    14.     ......{  
    15.         私有字段#region 私有字段  
    16.           
    17.         private string filePath = string.Empty;  
    18.         private string writeLine = string.Empty;  
    19.           
    20.         #endregion  
    21.  
    22.         私有方法#region 私有方法  
    23.           
    24.         private  void NewsMsg()  
    25.         ......{  
    26.             StreamWriter sw = null;  
    27.             if(File.Exists(filePath))  
    28.             ......{  
    29.                 sw = File.AppendText(filePath);  
    30.             }  
    31.             else 
    32.             ......{  
    33.                 FileStream fs = File.Create(filePath);  
    34.                 sw = new StreamWriter(fs);  
    35.             }  
    36.             sw.WriteLine(writeLine);  
    37.             sw.Close();  
    38.         }  
    39.           
    40.         #endregion  
    41.           
    42.         共有方法#region 共有方法  
    43.           
    44.         发送文件时,记录发送者,接收者和发送的文件名#region 发送文件时,记录发送者,接收者和发送的文件名  
    45.     /**////   
    46.         /// 当发送文件时,记录发送者,接收者和发送的文件名  
    47.     /// 
    48.  
    49.         /// 文件发送者  
    50.         /// 文件接受者  
    51.         /// 文件名  
    52.                public void SendFile(string strSendID,string strTargetID,string strFileName)  
    53.         ......{  
    54.             filePath = @"c:MsgMonitorSendFile.txt";  
    55.             writeLine = strSendID + " 向 " + strTargetID + " 发送 < " + strFileName + " > 文件";  
    56.             NewsMsg();  
    57.         }  
    58.         #endregion  
    59.           
    60.      接收文件时,记录文件接收者,发送者和发送的文件名#region 接收文件时,记录文件接收者,发送者和发送的文件名  
    61.     /**////   
    62.         /// 接受文件时,记录文件接收者,发送者和发送的文件名  
    63.     /// 
    64.  
    65.         /// 文件接收者  
    66.         /// 文件发送者  
    67.         /// 文件名  
    68.                public void RecvFile(string strReceiveID,string strSendID,string strFileName)  
    69.         ......{  
    70.             filePath = @"c:MsgMonitorRecvFile.txt";  
    71.             writeLine = strReceiveID + " 接收到 " + strSendID + " 发送的 < " + strFileName + " > 文件";  
    72.             NewsMsg();   
    73. }  
    74.         #endregion  
    75.           
    76.         文件发送成功后,记录发送者,接收者和发送的文件名#region 文件发送成功后,记录发送者,接收者和发送的文件名  
    77.     /**////   
    78.         /// 文件发送成功后,记录发送者,接收者和发送的文件名  
    79.     /// 
    80.  
    81.         /// 文件发送者  
    82.         /// 文件接收者  
    83.         /// 文件名  
    84.                public void  FileSendOK(string strSendID,string strTargetID,string strFileName)  
    85.         ......{  
    86.             filePath = @"c:MsgMonitorFileSendOK.txt";  
    87.             writeLine = strSendID + " 已经成功向 " + strTargetID + " 发送 < " + strFileName + " > 文件";  
    88.             NewsMsg();  
    89.         }  
    90.         #endregion  
    91.           
    92.        取消文件发送时,记录发送者,接收者和发送的文件名#region 取消文件发送时,记录发送者,接收者和发送的文件名  
    93.     /**////   
    94.         /// 取消文件发送时,记录发送者,接收者和发送的文件名  
    95.     /// 
    96.  
    97.         /// 取消文件发送者  
    98.         /// 文件发送对方  
    99.         /// 文件名  
    100.                public void FileSendCancel(string strCancelID,string strTargetID,string strFileName)  
    101.         ......{  
    102.             filePath = @"c:MsgMonitorFileSendCancel.txt";  
    103.             writeLine = strCancelID + " 取消和 " + strTargetID + " 发送 < " + strFileName + " > 文件";  
    104.             NewsMsg();  
    105.         }  
    106.         #endregion  
    107.           
    108.         #endregion   
    109.     } // end class NewsMonitor  
    110.       
    111. //end namespace Leading.Mis.NewsMonitor 

    C# COM组件开发3,用 Regasm 工具进行注册

            
    1. Regasm NewsMsg.dll / tlb: NewsMsg.tlb