添加COM引用然后向.Net类一样new一把

解决方案 »

  1.   

    private AxMediaPlayer.AxMediaPlayer axMediaPlayer1;
    this.axMediaPlayer1 = new AxMediaPlayer.AxMediaPlayer();
      

  2.   

    COM对象是ClassLibrary类,它生成DLL文件。要在VS开发环境中创建一个简单的COM对象,我们可以依次选择“文件”->;“新创建”->;“工程”->;“VisualC#工程”->;“类库”,然后创建一个名字为Database_COMObject的工程。   需要注意的是:在COM中调用VC#对象需要下面的条件: 
      ·类必须是public性质。 
      ·特性、方法和事件必须是public性质的。 
      ·特性和方法必须在类接口中定义。 
      ·事件必须在事件接口中定义。 
      不是在这些接口中定义的public性质的类成员不能被COM访问,但它们可以被其他的.NET Framework对象访问。要让COM能够访问特性和方法,我们必须在类接口中定义它们,使它们具有DispId属性,并在类中实现这些特性和方法。这些成员定义时的顺序也就是它们在COM中顺序。要让COM访问类中的事件,必须在事件接口中定义这些事件,并赋予它们DispId属性。事件接口不应当由类完成,类只实现类接口(它可以实现不止一个接口,但第一个接口是缺省接口),应当在缺省接口中实现需要让COM访问的方法和特性,方法和特性必须被标识为public性质,并符合在类接口中的定义。需要让COM访问的事件也在缺省的类接口中完成,它们也必须被标识为public性质,并符合事件接口中的定义。 
      在接口名字之前,每个接口需要一个GUID特性。要生成变个唯一的Guid,需要运行guidgen.exe工具软件,并选择“注册表格式”
     下面是一个范例:using System;
    using System.Runtime.InteropServices;
    using System.IO;
    using System.Text;
    using System.Data.SqlClient;
    using System.Windows.Forms;
    namespace Database_COMObject
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    [Guid("694C1820-04B6-4988-928F-FD858B95C880")]
    public interface DBCOM_Interface 

    [DispId(1)] void Init(string userid , string password); 
    [DispId(2)] bool ExecuteSelectCommand(string selCommand); 
    [DispId(3)] bool NextRow(); 
    [DispId(4)] void ExecuteNonSelectCommand(string insCommand); 
    [DispId(5)] string GetColumnData(int pos); 
    }
    // 事件接口Database_COMObjectEvents 
    [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
    public interface DBCOM_Events { } 
    [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(DBCOM_Events))] 
    public class DBCOM_Class : DBCOM_Interface 

    private SqlConnection myConnection = null ; 
    SqlDataReader myReader = null ; 
    public DBCOM_Class() 
    {
    }
    public void Init(string userid , string password) 

    try 

    string myConnectString = "user id=" + userid + ";password="+password+ ";Database=NorthWind;Server=SKYWALKER;Connect Timeout=30"; 
    myConnection = new SqlConnection(myConnectString); 
    myConnection.Open();
    MessageBox.Show("CONNECTED"); 

    catch(Exception e) 

    MessageBox.Show(e.Message); 


    public bool ExecuteSelectCommand(string selCommand) 

    if ( myReader != null ) myReader.Close() ; 
    SqlCommand myCommand = new SqlCommand(selCommand); 
    myCommand.Connection = myConnection; 
    myCommand.ExecuteNonQuery(); 
    myReader = myCommand.ExecuteReader(); 
    return true ; 
    }
    public bool NextRow() 

    if ( ! myReader.Read() ) 

    myReader.Close(); 
    return false ; 

    return true ; 

    public string GetColumnData(int pos) 

    Object obj = myReader.GetValue(pos); 
    if ( obj == null ) return ""; 
    return obj.ToString() ; 

    public void ExecuteNonSelectCommand(string insCommand) 

    SqlCommand myCommand = new SqlCommand(insCommand , myConnection); 
    int retRows = myCommand.ExecuteNonQuery(); 

    }
    public class Class1
    {
    public Class1()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    }
    }
      

  3.   

    http://www.csharphelp.com/archives/archive281.html这是上面那篇的英文原版
      

  4.   

    MSDN上的这一篇是最全面的,我相信是我目前看到的.http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcwlkCOMInteropPart1CClientTutorial.asp