}
// 事件接口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(); }
} }
在创建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")]
创建对象。创建对象会生成一个可以被导入到可管理性或非可管理性代码中的类库。
第二部分:使用Visual C++创建访问COM对象的客户端软件
·使用VC++开发环境创建一个简单的工程。
·使用#import directive导入类型库。
·在界面中创建一个Smart Pointer,从接口中执行COM类提供的功能。确保在应用程序加载时添加CoInitialize()调用:
CoInitialize(NULL); Database_COMObject::DBCOM_InterfacePtr p(__uuidof(Database_COMObject::DBCOM_Class)); db_com_ptr = p ; db_com_ptr->Init("scott" , "tiger");
下面的代码对Customers数据库表执行一个SQL命令,返回给定ID的客户的信息:
char cmd[1024]; sprintf(cmd , "SELECT COMPANYNAME , CONTACTNAME , CONTACTTITLE , ADDRESS FROM CUSTOMERS WHERE CUSTOMERID = '%s'" , m_id ); const char *p ; 上一页 [1] [2] [3] 下一页
 【责编:Luzi】 |