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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

现在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类”


图四、添加类型库中的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组件操作成功.



VB.NET调用ARX程序创建的COM Server 首先,我们看如何用VS 2005(英文)来创建一个ARX COM Server并暴露一个接口供后面的程序调用。 新建一个工程,选择用ObjectARX向导创建工程,取名字为comServerFromArx,按OK按钮。 在出现的对话框中左边选项中选择COM Options,在右边的选项中选择使用ATL来实现COM Server,按Finish按钮。 在工 阅读详情

相关推荐

matlab下做com组件

matlab下做com组件

ytyggg的博客 3807

C++调用vb6.0制作的Activex DLL

vs2008 环境下C++代码调用vb6.0生成的Activex dll。

VB.NET实现你的游戏梦想Java教程

VB.NET实现你的游戏梦想Java教程 游戏开发是许多程序员的梦想,看着游戏中那华丽的画面。有多少人会感叹,如果自己能做就好了。 然而开发游戏需要对DirectX的调用,原来除了C++没有其他语言可以胜任这份工作,虽然DirectX7.0SDK加入了对VB的支持,但是VB毕竟能力有限,无法胜任这份严峻的工作,游戏可以说是最吃资源的程序,VB的速度无法完成。即使做出个游戏也被人说做不入流。这样一来VB程序员无法实现自己的梦想了。 .net推出了,VB.net的性能已经可以和VC++媲美,用微软的说法内核是

ccc369639963的博客 1636

ComClass(串口类winAPI)

PC程序跟RS232串口进行通信算是比较老的题目了,不过老归老,只要用这个接口的硬件还在,就难免要去折腾它。而这个时候就会发现老的坏处在于资料都是半截入土,拍一拍烟尘四起,抖一抖蛛丝乱飞的玩意。 现在做这个的基本都是用的SerialPort这个类,而这个类的最新更新已经有一段岁月,所以本人在下载了这个东西之后,费了些功夫才将其修改到能运行在VS2015版本的PC程序上,在此把修改完的版本贴出来做下记录。并将一般调试串口程序都会用到的两个软件拿出来和大家分享。

在VC.NET调用VB.NET或C#生成的DLL类库

C++中,想要调用其它语言编写的DLL动态库,原先通常的做法是基于COM组件Component Object Module)技术编译ActiveX DLL动态链接库,注册(Regsvr32)之后即可在C++调用。到了DOTNET环境中,上述方法依然有效,因为VC.NET依然支持非托管DLL文件,但是VB.NET/C#编写的DLL类库属于托管代码,就不能用非托管方式调用了。当然,VB.NET或C

xjnzhidao的博客 2955

C# 互操 调用COM组件

本专题概要: 引言如何在C#中调用COM组件——访问Office 互操作对象在C# 中调用COM组件的实现原理剖析错误处理小结   一、引言   COMComponent Object Modele,组件对象模型)是微软以前推崇的一个开发技术,所以现在微软的很多产品都用到了COM组件,如Office,IE 等。然而如果.NET 平台下的程序想访问COM组件的方式来实现某个功能怎么办呢

leilonghao的博客 1万+

C++文件流操作与VB ListView控件集成

本案例背景是在一个跨平台的应用程序中实现一个数据导入导出的功能。该应用程序是一个财务管理软件,需要将用户的数据在不同系统间进行交换。核心需求如下:导入功能:能够读取包含用户财务信息的CSV文件,并将其数据导入到应用程序数据库中。导出功能:能够从应用程序数据库导出用户数据到CSV文件中。错误处理:在读写过程中,能够有效地识别文件格式错误、路径错误等异常,并给用户清晰的错误提示。

weixin_29476595的博客 1148

如何在C++中使用VBScript(使用Qt)--How to use VBScript in C++ (Using Qt)

VBScript和C++混合编程,使用Qt实现。

Spoon's Blog 2289

详解vb字符串与C/C++动态库的交互

又是崭新的一年,大侠又来雷人了。   QQ版本更新以后,偶然翻看一下以前写的自动聊天机器人,居然不适用了! 于是重写了个动态库,为String传递所困扰,于是决定借假期搞翻这颗钉子。   之前也写过关于参数传递的文章,不过对字符串的讲述很少,原因是我没亲自测试过,呵呵 先说C/C++的两个函数: EXPORT_API DWORD __stdcall fnHook(DWORD dwIn

水木清华 3745

VC++6.0调用VB.net

VB.ne程序作成 实装VbClass.vb类 Imports System.Runtime.InteropServices <ClassInterface(ClassInterfaceType.None)> Public Class VbClass Public Function vb_function(ByRef strIn1 As String, ByRef str...

一个有梦想的叫花子! 547

VB.net调用VC DLL(三)

但是仍然报“53”错误,无法找到dll文件,可能是依赖的DLL找不到所致。使用VS提供的命令,可以查看DLL所依赖的DLL。def文件必须用VS新建,不能从外部考入。1、VC写DLL的时候。

Xiaok的专栏 939

VC调用VB写的COM

VB. 步骤: 1.创建类库;类库的创建必须分为接口和实现类;给外面提供的是COM接口; 创建了接口和类之后还要创建“Guid”,这个在“工具-》创建GUID”创建。[Guid("A1DEEF6C-A752-4498-9AA9-7ABFA2C9B8C2")] 2.在“项目属性-》生成”勾选“为COM Interop注册”;在“项目属性-》应用程序-》程序集信息”中设置“使程序集CO...

weixin_30341745的博客 206

C++中使用CognexVisionpro (修订2.0)

由于visionpro在7.2以及后续的版本中全面支持.net架构,不在发布COM组件。所以不能在VC++中直接使用visionpro. 但是可以利用interop 将.net 的程序封装为要吧在VC++调用COM组件。使用方法如下: VB.net中建一个工程InteropUserControl 添加reference 代码中加入 improts … 加入函数 例如 public OpenImage() 界面中加入显示内容。 以上内容与VB.net编程一致。在此不再详述。 编译

qq_656236576的博客 2456

vb窗体程序调用vc ATl写的com组建一个小发现

假设前面的组建都已生成注册成功。 vb程序添加好vc的com组建的引用之后,这是第一次调用前引用路径设置,编译运行成功。第二次再查看引用的路径,就会变为vb当前路径中的obj文件夹下的com组建,而不是原来第一次添加的路径,这点在vs2010里头第一次发现,不知道旧版本的vs是不是也这样。关键的一点就是为什么路径修改后还能正确找到com组建,即使把vb目录相应的com删掉,下一次编译同样运行成功

2351

VB6与VC++混合编程实战:DLL交互与字符串处理详解

动态链接库(DLL)是Windows平台上实现代码复用和模块化开发的核心技术,它允许不同编程语言编写的模块相互调用,从而发挥各自优势。其原理在于提供标准化的二进制接口,通过预定义的调用约定和函数导出机制,实现跨语言的功能共享。这种技术价值在于能显著提升开发效率与系统性能,例如在桌面应用中,可利用VB快速开发用户界面,同时通过VC++实现高性能计算或硬件操作。典型的应用场景包括老旧系统升级、性能关键模块优化以及多语言协同开发。本文聚焦于VB6与VC++通过DLL交互时的字符串处理这一经典问题,深入探讨了调用

weixin_30719711的博客 323

matlab混编 利用com组件

matlab的combuilder系列-matlab下做com组件 com builder是matlab6.5才有的,也是mathworks公司推荐使用于混合编程的,这些日子我对他进行了全方位的摸索,感觉是爽呆了,下面我们一起来揭开它的神秘面纱,^_^。 此系列分为以下几块: 1.matlab下做com组件 2.vb,c#.net实现调...

FLY_THINK2012的博客 395

vc++实现word应用程序事件监听及响应

WORD编程,个人认为应该首选c#或VB,因为

仙子崖 2376

VC++实现Word自动化:COM原理、实战代码与部署指南

COM组件对象模型)是微软Windows平台上实现软件组件间互操作的核心技术,其原理基于二进制接口标准,允许不同语言编写的程序相互通信。在自动化办公领域,COM技术价值尤为突出,它使得外部程序能够通过暴露的对象模型,远程控制如Microsoft Word这类大型应用,实现文档的批量生成、格式处理和报表输出。应用场景广泛覆盖企业级报告生成、合同批量处理和数据驱动的文档生产。本文聚焦于VC++通过COM自动化操作Word,深入解析其对象模型,并提供从环境配置、核心功能实现到性能优化的完整工程实践方案,其中涉及

weixin_33416697的博客 291
上一篇: Windows7不支持水平/垂直跨越(H/V Span)
下一篇: 进程与线程
jeromeyu
博客等级 码龄18年 7粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值