现在COM组件的使用越来越广泛,在各个程序中调用COM组件我想大家都遇到过,这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用VB编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。操作规程与上一篇C++和C#编写的COM与DLL相互调用相似,在VB.net操作步骤:
一、NewProject
二、选择 Class Library
三、打开资源管理器,删除刚才自动创建的Class.VB
四、在资源管理器下,右键,增加新项,选择 COM Library
五、VS2005将自动为您增加以下代码:
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
#Region "COM GUID"
' 这些 GUID 提供此类的 COM 标识
' 及其 COM 接口。若更改它们,则现有的
' 客户端将不再能访问此类。
Public Const ClassId As String = "7421a122-db9d-43af-bd7a-5c9e4608a14b"
Public Const InterfaceId As String = "e533db7e-167c-4e67-953e-e19d28604b07"
Public Const EventsId As String = "48704df5-82c0-4c27-a308-13d8137c5d93"
#End Region
' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
End Sub
End Class
六、此时可以直接增加你想要增加的操作功能
例如要增加数据库连接的函数:
Imports System.Data.SqlClient
Imports System.Data.Sql
Imports System.IO
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Data
<ComClass(ComClassData.ClassId, ComClassData.InterfaceId, ComClassData.EventsId)> _
Public Class ComClassData
#Region "COM GUID"
' 这些 GUID 提供此类的 COM 标识
' 及其 COM 接口。若更改它们,则现有的
' 客户端将不再能访问此类。
Public Const ClassId As String = "6295f1f3-4090-49a6-8d30-143932cca8a4"
Public Const InterfaceId As String = "dcde940e-eadc-4ee2-9874-076e45dc7d64"
Public Const EventsId As String = "e6ae62c7-777c-44e6-91c7-2ee58c6fe313"
#End Region
' 可创建的 COM 类必须具有一个不带参数的 Public Sub New()
' 否则, 将不会在
' COM 注册表中注册此类,且无法通过
' CreateObject 创建此类。
Public Sub New()
MyBase.New()
End Sub
Public objDataSet As New DataSet
''' <summary>
''' 数据库连接
''' </summary>
''' <remarks></remarks>
'''
public function ConnectionData(ByVal ipAddress As String, ByVal databaseName As String, ByVal user As String, ByVal password As String) Try
objConnectionSqlStr = "server =" & ipAddress & ";database =" & databaseName & ";UID =" & user & " ;Pwd =" & password & ";max pool size = 500"
objConSql = New SqlClient.SqlConnection(objConnectionSqlStr)
objCommand.Connection = objConSql
Call WriteConfig()
'objConSql.Open()
'objConSql.Close()
Catch ex As Exception
Console.WriteLine("访问数据库出错,错误详细信息:" & ex.Message)
End Try
End Sub
End Class
七、生成或者运行一下工程,到工程目录下(ClassLibrary1\ClassLibrary1\bin\Debug \ )可以看到有一个
.tld文件和一个.dll文件
恭喜你的操作过程完全正确,下面可以用VC6.0测试一下是否可用。
一、打开 VC6.0新建一个工程进入
二、将刚才生成的 tld 文件复制到VC6.0的新的工程目录下
二、快捷方式Ctrl+W 在弹出的对话框中在Add Class 选择 From a Type library 选择 tlb文件
三、选择OK,确定即可
四、在FileView中可以看到VC6.0自动创建的相应的.CPP与.H 的两个文件
五、打开CPP文件查看是否有一个 ConnectionData 函数
六、当你看到这个函数的时候,初始一个对象假设为Conn
七、调用:Conn.ConnectionData (".","TestDB","sa","")
八、未发现错误提示,说明访问数据库操作成功。
使用 vc.net 的朋友,步骤如下:
1、建立一个 MFC 的应用程序
2、执行菜单“添加\添加类”,选择 MFC 分类中的“类型库中的MFC类”
![](http://vckbase.com/document/journal/vckbase44/images/comtut11pic4.jpg)
图四、添加类型库中的MFC类
3、选择组件文件 dll(或 tlb 文件),并选择需要包装的接口
![](http://vckbase.com/document/journal/vckbase44/images/comtut11pic5.jpg)
图五、选择文件和接口
4、在适当的位置输入调用代码
#include "CDispSimple.h" // 包装类的头文件
void demo()
{
// 已经进行过了 COM 初始化
CDispSimple spDisp; // 包装类的对象
spDisp.CreateDispatch( _T("Simple8.DispSimple.1") ) // 启动组件
spDisp.xxx(...); // 调用函数
spDisp.ReleaseDispatch(); // 释放接口
恭喜你的操作过程完全正确。VC6.0和vc.net调用VS2005编写的COM组件操作成功.