六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

C# 創建COM對象 C# 創建COM DLL

[摘要]第一部分:用C#創建簡單的COM對象COM對象是ClassLibrary類,它生成DLL文件。要在VS開發環境中創建一個簡單的COM對象,我們可以依次選擇“文件”->;“新創建”->;“工程&...

 

第一部分:用C#創建簡單的COM對象
  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工具軟件,并選擇注冊表格式” 下面是一個類界面:

 

[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); 
}

 

  COM事件接口:

 

// 事件接口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
typeofDBCOM_Events))
public class DBCOM_Class : DBCOM_Interface 
{

 

  需要注意的是,在類的前面,需要設置下面的特性:

 

ClassInterfaceClassInterfaceType.None
ComSourceInterfaces
typeofDBCOM_Events))]

 

  ClassInterfaceType.None表示沒有為該類生成類接口,如果沒有明確地實現接口,類只能通過IDispatch提供后期綁定訪問。用戶希望通過明確地由類實現的接口使外部對象能夠訪問類的功能,這也是推薦的ClassInterfaceAttribute的設置。 

  ComSourceInterfacestypeofDBCOM_Events))]確定許多作為COM事件向外部對象提供的接口。在本文的例子中,我們不對外部對象開放任何事件。 

  下面是COM對象完整的源代碼:

 

using System 
using System.Runtime.InteropServices
 
using System.IO
 
using System.Text
 
using System.Data.SqlClient
 
using System.Windows.Forms 
 

namespace Database_COMObject 

[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
typeofDBCOM_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=NorthWindServer=SKYWALKERConnect 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
(); 



}

 

  在創建COM對象前,我們必須向COM Interop注冊該對象。右擊方案管理器中的工程名字,點擊快捷菜單上的屬性選項,然后再點擊配置”->;創建,擴展output小節,將Register for COM Interop選項的值設置為true。這樣,一個COM對象就能夠與可管理性應用程序進行交互。 

  為了使COM對象能夠被外部對象調用,類庫組合必須有一個強名字。創建強名字需要用到SN.EXE名字:

 

sn -k Database_COM_Key.snk 
打開AssemblyInfo.cs,并修改下面一行的內容: 
[assembly: AssemblyKeyFile
"Database_COM_Key.snk";)]
  創建對象。創建對象會生成一個可以被導入到可管理性或非可管理性代碼中的類庫。

 


常見的網絡操作系統有UNIX、Netware、Windows NT、Linux等,網絡軟件的漏洞及缺陷被利用,使網絡遭到入侵和破壞。




主站蜘蛛池模板: 天堂tv | 日韩在线三级视频 | 青青青亚洲精品国产 | 日韩中文一区宇都宫紫苑 | 涩涩网页| 日韩a毛片 | 手机看片日韩日韩 | 在线免费视频一区二区 | 亚洲成a人片 | 日本欧美国产精品第一页久久 | 亚洲专区区免费 | 亚洲国产欧洲精品路线久久 | 日韩中文字幕精品视频在线 | 日本视频免费在线 | 午夜影视在线 | 倩女还魂在线观看完整版免费 | 人人干97| 欧美野外多人交3 | 亚洲成a人片 | 日韩亚 | 日韩高清影院 | 天天干网站 | 色综合视频在线 | 亚洲日韩在线视频 | 日本一区二区三区精品国产 | 亚洲欧美风情 | 日韩福利视频高清免费看 | 欧美一级免费观看 | 性刺激视频在线播放免费 | 婷婷狠狠干 | 日本韩国三级在线观看 | 天天拍天天干天天操 | 亚洲视频第一页 | 日日操日日干 | 日韩成人在线免费视频 | 欧美午夜在线视频 | 日韩美女在线观看 | 深夜视频在线观看免费 | 青青青爽在线视频观看大全 | 亚洲激情视频在线播放 | 一区在线看 |