由於現在.net的應用比較廣泛,日常的工作中會經常地遇到C#和COM的互操作問題,為了更完整,本篇把C#處理COM的情況匯總以下
C#中對COM的互操作很是方便,具體如下:
NO PIA |
C# 4.0引入的動態特性 Guid id; id = new Guid("D7D0B2E8-1795-4E23-96BF-F07EC28FB44C"); dynamic complug = Activator.CreateInstance(Type.GetTypeFromCLSID(id)); string t="dlr", r ; complug.DoWork(t, out r); Console.WriteLine(r); |
PIA |
首先IDE中Add Refernce引用組件,此時自動產生互操作的庫(也可使用tlbimp.exe手動產生) ComPlugLib.MyKit kit = new ComPlugLib.MyKit(); kit.DoWork(t, out r); 如果需要管理COM的生命週期[比如COM EXE進程的調用後即時結束等],可以使用 Marshal.*** 處理com對象 |
如下是對於Office操作的C#不同版本比較
由於現在.net的應用比較廣泛,日常的工作中會經常地遇到C#和COM的互操作問題,為了更完整,本篇把C#處理COM的情況匯總以下
C#中對COM的互操作很是方便,具體如下:
NO PIA |
C# 4.0引入的動態特性 Guid id; id = new Guid("D7D0B2E8-1795-4E23-96BF-F07EC28FB44C"); dynamic complug = Activator.CreateInstance(Type.GetTypeFromCLSID(id)); string t="dlr", r ; complug.DoWork(t, out r); Console.WriteLine(r); |
PIA |
首先IDE中Add Refernce引用組件,此時自動產生互操作的庫(也可使用tlbimp.exe手動產生) ComPlugLib.MyKit kit = new ComPlugLib.MyKit(); kit.DoWork(t, out r); 如果需要管理COM的生命週期[比如COM EXE進程的調用後即時結束等],可以使用 Marshal.*** 處理com對象 |
如下是對於Office操作的C#不同版本比較
//C# 4.0
dynamic word = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application")); word.Visible = true; var WordApplication = new Microsoft.Office.Interop.Word.Application(); WordApplication.Visible = true; object missing = System.Reflection.Missing.Value; object file = @"c:\test.txt"; object visible = true; object readOnly = false;
// 需要引入 Microsoft.Office.Interop.Word.dll(VS安裝)
//C# 4.0 Named and Optional Parameters
var betterWay = WordApplication.Documents.Open(file, ReadOnly: true, Visible: true);
betterWay.Activate();
betterWay.Close();
//C# 1.0~3.5(.net3.0有一個簡化的操作庫Office) http://www.microsoft.com/downloads/details.aspx?FamilyID=46B6BF86-E35D-4870-B214-4D7B72B02BF9&displaylang=en VSTO_PTExtLibs.exe
Document aDoc = WordApplication.Documents.Open(
ref file, ref missing, ref readOnly, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref visible,
ref missing, ref missing, ref missing, ref missing);
aDoc.Close();