從C#中調用COM
組件 (後期連接)
.Net框架是COM的一個自然發展,兩者共享許多核心要素,這包括組件的再利用以及語言的種 立性。
為了向後兼容,COM Interop可以使用現存的COM組件而不要求對原始組件進行修改。當一個
框架開發人員想將COM代碼合並到一個管理
應用程序中時,就可以用COM Interop功能引入相相關的CO
類型。引入之後,這個COM類型就可以使用了。這屬於前期連接。但是有時候你需要對象的漢 期連接,
這在.Net中也能實現,使用名稱空間映射就可以通過後期連接來調用COM對象。
這裡介紹一個應用程序例程,它將調用Excel,並且通過使用後期連接使它可視。
後期連接將使用Reflectionb的Type類,這個Type類有許多方法可以取得COM對象,
GetTypeFromProgID("Application"),這個方法從系統注冊表中得到COM ID,
然後使用STATIC類的成員 Activator.CreateInstance()創建這個COM對象的一個新例示。
要想調用COM對象的方法、
函數和屬性,就必須使用包含正確設置的Type對象的InvokeMethood()方法。
這個方法接受一些參數變量,其中最重要的一個是方法類型的ex屬性(get或set)。在例子子中我們?
Excel.Visible使用了set屬性,從而使Excel應用程序可視。
我們將嘗試在.Net環境中調用Excel應用程序。這是一個後期連接應用程序,因為如果是前破 連接的話
就需要使用COM對象的RCW(RunTime Callable Wraper)來完成下面的命令行程序tblimp所屯 成的任務:
ex. c:\> tblimp /out:
//Variable
Type Excel;
object[] parameter= new object[1];
object ExcelObject;
try
{
excel = Type.GetTypeFromProgID("Excel.Application");
excelObject = Activator.CreateInstance(Excel);
parameter[0] = true;
excel.InvokeMember("Visible", BindingFlags.SetProperty, null, ExcelObject, parammeter);
}
catch(Exception e)
{
Console.WriteLine("Error Stack {0} ", e.Message) ;
}
finally
{
//When this object is destroyed the Excel application will be closed
//So Sleep for sometime and see the Excel application
Thread.Sleep(5000);
//Relaese the object
//GC.RunFinalizers()
}
1.如何讀取Windows注冊表信息?
public static int Main(string[] args)
{
RegistryKey SUBKEY;
RegistryKey TAWKAY = RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive..CurrentUser,"");
string subkey = "Software\\TAW\\BSE";
SUBKEY = TAWKAY.OpenSubKey(subkey);
object dsn = SU