VC++调用VB.NET缩写的COM

来源:互联网 发布:蒙泰5.1软件 编辑:程序博客网 时间:2024/05/02 13:39

现在COM组件的使用越来越广泛,在各个程序中调用COM组件我想大家都遇到过,这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用VB编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。操作规程与上一篇C++和C#编写的COM与DLL相互调用相似,在VB.net操作步骤:

一、NewProject

二、选择 Class Library

三、打开资源管理器,删除刚才自动创建的Class.VB

四、在资源管理器下,右键,增加新项,选择 COMLibrary

五、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类”


图四、添加类型库中的MFC类

3、选择组件文件 dll(tlb 文件),并选择需要包装的接口


图五、选择文件和接口

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组件操作成功.