vb调用C#写的dll

STM32智能安防与燃气监测系统:从原理图到仿真验证全解析 嵌入式系统开发中,传感器数据采集与可靠性设计是产品化落地的关键环节。通过ADC采样、滑动滤波和状态机逻辑,系统能够对燃气浓度、人体红外信号等环境参数进行实时判断与联动控制。在安防监测场景下,防误报策略和硬件电路的稳定性设计直接影响设备实际表现。本文基于STM32F103C8T6主控,结合Proteus仿真验证流程,详细拆解一个智能安防与燃气监测系统的完整实现:涵盖硬件原理图关键细节、软件状态机核心逻辑、防误报算法以及仿真测试方法,并整理高频故障排查技巧,为物联网安全应用开发提供可复用的工程参考。 阅读详情

在做系统升级维护的项目中,用到了老系统(VB实现)要调用一部分新功能(C#实现)的情况,于是进行了简单的调查。发现如下资料

网上发现的资料。

---------------------------------------------------------------------------------------------------------------

里面有两个方法  
Encrypt(string pToEncrypt,string sKey) //加密   
Decrypt(string pToDecrypt,string sKey) //解密   

然后你这样写代码:   
using System;   
using System.Runtime.InteropServices;   
namespace 名称空间   
{   
     // 首先建立接口,这个是Com必须使用的   
     [Guid("61BB24CB-4C2C-40f8-9E13-1AC5E558D56A")]   
     public interface IEncrypt   
     {   
          string Encrypt(string pToEncrypt,string sKey);   
          string Decrypt(string pToDecrypt,string sKey);   
     }   
        
     // 写接口的实现   
     [Guid("CB52E990-185E-4448-A7E8-C88ECAD563AB")]   
     public class 类名称 : IEncrypt   
     {   
          public string Encrypt(string pToEncrypt,string sKey)   
          {   
                // 复制FAQ加密代码   
          }   
          
          public string Decrypt(string pToDecrypt,string sKey)   
          {   
                // 复制FAQ解密代码   
          }   
     }   
}   

然后用vs.net打包成.dll类库文件,假设名称为MyEncrypt.dll   
然后用如下工具   
regasm MyEnCrypt.dll /tlb:MyEncrypt.tlb   
这个.tlb文件就是类型库,可以由vb6和vc++6引用。   

注意上面的guid是使用vs.net工具菜单里面的创建guid工具生成的。   
还要注意,vs.net自动生成的assemblyinfo.cs文件中必须添加强名称和版本号,因为Com组件需要版本号,不要改动版本号,也不要用vs.net自动的1.*这样的版本号,最好使用   
1.1.1.1这样的固定版本,而且必须一次添加,不能多次添加。   


步骤   
一 生成.net程序集:   
首先你把
http://expert.youkuaiyun.com/Expert/FAQ/FAQ_Index.asp?id=35935的代码复制。   
然后你复制这个代码   
using System;   
using System.IO;   
using System.Text;   
using System.Runtime.InteropServices;   
using  System.Security.Cryptography;    
namespace Csic   
{   
     // 首先建立接口,这个是Com必须使用的   
     [Guid("61BB24CB-4C2C-40f8-9E13-1AC5E558D56A")]   
     public interface IEncrypt   
     {   
          string Encrypt(string pToEncrypt,string sKey);   
          string Decrypt(string pToDecrypt,string sKey);   
     }   
        
     // 写接口的实现   
     [Guid("CB52E990-185E-4448-A7E8-C88ECAD563AB")]   
     public class Crypt : IEncrypt   
     {   
          public string Encrypt(string pToEncrypt,string sKey)   
          {   
                // 复制FAQ加密代码   
           }   
          
          public string Decrypt(string pToDecrypt,string sKey)   
          {   
                // 复制FAQ解密代码   
           }   
     }   
}   

把上面的文件保存成vs.net项目的一个类库工程。   
然后使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示符   
在命令行内打下   
cd c:/ <回车>   
sn -k myKey.snk<回车>   
就在C盘根目录下生成一个名叫myKey.snk的强名称文件,然后关闭提示符窗口。   
在vs.net的那个类库工程自动生成的AssemblyInfo.cs文件内把   
[assembly: AssemblyKeyFile("")]   
改成   
[assembly: AssemblyKeyFile(@"C:/myKey.snk")]   
把[assembly: AssemblyVersion("1.0.*")]   
改成   
[assembly: AssemblyVersion("1.0.0.0")] // 注意:这时你的Com组件版本为1.0.0.0版   

然后按Shift + Ctrl + B键生成dll库(使用Release模式),假设是Csic.Crypt.dll。   
这时候,程序集就建立成功了。   

二、注册该程序集并创建一个类型库   
仍然使用开始菜单中的Vistual Studio .Net命令提示符   
进入你的项目目录,假设为D:/myProject/bin/Release   
在对话框中输入   
d:<回车>   
cd myproject/bin/release<回车>   
然后输入 dir 命令可以看见Csic.Crypt.dll文件   
然后输入:regasm /tlb Csic.Crypt.tlb Csic.Crypt.dll<回车>   
然后就在这个目录下生成了Csic.Crypt.tlb类型库文件。不要关闭此提示符窗口。   
这时候,这个.dll的.net程序集就变成一个标准的Com组件了,但是还不能用,必须让它变成全局Com组件。   

这个regasm 实用程序将创建一个类型库并在 Windows 注册表中对其进行注册,以使 PhysServer2.dll 中的类对 COM 客户端可用 。   

三、 将程序集添加到全局程序集缓存中   

进入提示符窗口,输入   
gacutil /I Csic.Crypt.dll<回车>   
这时,你的这个dll就被复制到全局程序集缓存中了。也就是说无论在这个电脑的哪个硬盘上都可以使用此dll组件了。   

四、使用方法   
asp内的使用方法   
set obj = Server.CreateObject("Csic.Crypt")   
dim str1   
str1 = obj.Encrypt("要加密内容","密码") // 加密   
dim str2   
str2 = obj.Decrypt("要解密内容","密码") // 解密

---------------------------------------------------------------------------------------------------------------

 

资料中写的,按照他做就能够实现,但是对于VB不太熟悉的人来说,遇到了一点问题,所以个人总结一下:

1,上面资料的第三步三、 将程序集添加到全局程序集缓存中   后,要在VB项目中添加tlb文件的引用

     选中相应工程--〉工程--〉引用追加--〉生成的DLL上打勾

2,使用方法,除了set   obj   =   Server.CreateObject("Csic.Crypt")外,还可以使用如下方法:

    Dim a As New ComTest

    str1   =   a.Encrypt("要加密内容","密码")   //   加密

3,关于Com组件的生成,下面的描述有些复杂,有如下简单点的方法:

---------------------------------------------------------------------------------------------------------------

1、先选择"文件"--> -->"新建"-->"项目"-->"类库"

 我在这取名TestVB,代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace TestVB
{
    public class Test
    {
        public string testEcho()
        {
            return "test1";
        }
    }
}

2、编译此项目前,先设置"项目"-->"TestVB属性"-->"生成"下的"为COM Interop 注册"打上勾,原有AssemblyInfo.cs文件中的"[assembly: ComVisible(false)]"修改为"[assembly: ComVisible(true)]"保存,编译即可      (这儿才是重点,第一个资料没有涵盖)

3、把生成的DLL文件拷贝到VB开发机器上(该机器需安装相应的.NET框架),运行Regasm /tlb  /codebase  $DLL_DIR/TestVB.dll 命令注册该DLL文件,在VB新建项目中引用TestVB.tlb即可在vb中调用DLL中的函数。测试代码如下:

Private Sub Command1_Click()
    Dim a As New Test
   
    MsgBox a.testEcho
End Sub

4、以上是测试代码,仅考虑了是否正确调用函数,假使想让VB调用.net DLL时显示提示该类中的方法等,需要在DLL编写时添加额外的代码。

---------------------------------------------------------------------------------------------------------------

 

引用链接:

http://blog.youkuaiyun.com/TheRule/archive/2006/04/28/694756.aspx

http://space.itpub.net/186726/viewspace-448770

VB调用C# Dll文件 在工作中遇到了在VB6.0的程序里要调用C#的Dll的问题,显然这两个开发环境属于不同的平台。在网上拜读了几位大师的文章后,在实际试验中还是会发生这样那样的问题,最后还是实现了预期效果,在此我把我的实验步骤和注意事项分享如下,希望对需要之人有所帮助 立即下载

相关推荐

VB6.0调用C# Dll解决方法

VB6.0调用C# Dll解决方法 用C#实现dll 用cmd命令生成tlb文件 VB引用tlb文件 进行引用。

C#编写dll, VB6.0调用

本周有个任务,实现一个数据上传接口,要求是VB6.0实现。

小鹰信息技术服务部 2683

VB和C#互相调用

1.VB调用C#编写的dll 2.C#调用VB写的Dll

详解VB调用C#类库的方法步骤

使用c#语言在.net平台生成的dll是基于MSIL的二进制代码,通常情况下是无法被native的语言和程序调用的(例如vb,vc,delphi)。但是一般来说windows上native的程序都是可以直接使用com对象的。通过.net平台提供的一些工具,可以为其伪造一个com接口并注册到系统中。此时,可以在native的程序里,通过这个伪com接口来实现此.net的dll的调用。 vb调用C#

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 6575

C# 编写DLL 让VB调用

VB调用C#编写的DLL 使用VS C#编写DLL函数。封装好,实现DLL注册功能。达到VB调用。

OpenHarmony实战开发-如何实现文件分布式同步编辑

在分布式文件场景中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。两台设备组网的分布式场景是工作中常常需要的。这样的分布式场景有助于加快工作效率,减少工作中的冗余,本例将为大家介绍如何实现上述功能。​ (2)订阅分布式数据变化:通过this.distributedObject.on(‘status’, this.statusCallback)监听分布式数据对象的变更。

2401_82546228的博客 753

C#调用VB6写的ActiveX Dll

搜索了很多资料,下载了Demo:http://download.youkuaiyun.com/detail/xieguoxian/2747484然后在同学电脑上测试才弄好...记录下 (一) 前期搜索资料:   VB写好的DLL,在C#里面添加引用,就会有与DLL同名的namespace,vb6的类模块变成interface,但是可以new出来调用,调用就是出错,说是未注册类...     具体...

weixin_30338461的博客 631

DINOv2 基于自定义数据集进行图片分类预测

(前提是安装好pytorch)1. pip安装2. 下载dinov2提供的预训练模型,需要自行前往网站上查找dinov2模型进行下载。模型需要下载三个文件:下载完成后将上述三个文件放置在本地一个名为dinov2_base的文件夹中即可。

sinat_34770838的博客 6666

如何用VB,C#调用C++写的DLL

之前在网上搜集了一些资料,现在稍微gkg

shejiannan的专栏 3884

深入解析高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计

本文深入解析了高通Adreno DPU的DRM/KMS驱动架构与硬件协同设计,详细介绍了Adreno DPU的核心模块组成、显示接口设计以及DRM驱动架构。通过实际案例和调试技巧,帮助开发者理解硬件与软件的协同工作原理,优化显示性能并解决常见问题。

weixin_29266679的博客 438

Obsidian从零搭建:可验证、可回溯、可演进的知识库工具链

个人知识库不是开箱即用的软件,而是基于Markdown内核构建的可演进系统。其核心原理在于分离‘稳定内核’与‘可插拔扩展’:Obsidian原生支持双链、嵌入、Frontmatter等基础能力,构成不可降级的知识骨架;而Dataview、Templater等插件则作为可验证、可回溯的增强层,需通过三问验证(解决痛点?有原生替代?失效可降级?)方可引入。这种设计赋予知识库技术价值——抗版本升级、跨平台兼容、离线可用,并支撑技术文档管理、项目复盘、读书笔记等真实场景。当面对computer use插件不可用或h

weixin_30660027的博客 680

[导入] ASP以及VB中调用C#写的DLL的方法

最后回复:jamin at Sat 29 Mar 2008 17:28:27 +0000 所在版面:.NET&ASP.NET 帖子作者:jamin 内容提要:1、启动VS.Net,新建一个C# DLL项目,项目名称输入TestDll 2、在TestDll项目的Class1.cs里面输入以下代码: using System; using S...

weixin_30268921的博客 68

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

VB.NET动态加载C#或VB.NET生成的DLL文件调用动画教程[黑白智慧写](动态调用DLL).txt

 _________________下载原码:____________________________-注意:全包括二部分,一定要下载完后,直接解压,在解前不要修改压缩文件名,否不能正常解压!ReadDLL-VB.NET.part2.rar 1.3MB ReadDLL-VB.NET.part1.rar 1.9MB 下载地址:http://kevery.ys168.com打开地址后,

kevery_net Q:214958266 3150

避坑指南:Vue调用摄像头常见6大报错解决方案(navigator.mediaDevices全兼容方案)

本文深入剖析了在Vue应用中调用摄像头时常见的六大报错,如权限拒绝、设备未找到等,并提供了基于navigator.mediaDevices的全兼容解决方案。内容涵盖从HTTPS环境配置、浏览器兼容性处理到摄像头资源管理与高级错误处理,旨在帮助开发者构建稳定可靠的企业级摄像头应用。

Black的专栏 340

基于 YOLOv26 的 PCB 板缺陷检测:工业级视觉实战

本文提出了一种基于YOLOv26的PCB板缺陷检测系统,通过深度学习技术实现对PCB板缺陷的自动化检测。系统能够识别短路、开路、焊点不良等8种常见缺陷,具有高精度、多类别分类和实时推理等优势。文章详细介绍了系统架构,包括数据采集、预处理、YOLOv26模型检测和后处理模块。在代码实现部分,给出了环境配置、数据预处理与增强的具体方法,使用Albumentations库进行图像增强处理。该系统为电子制造业提供了高效、准确的PCB质量检测解决方案,显著提升了检测效率和准确性。

一键难忘的博客 339

vb调用java webservice_vb通过C#写的DLL实现与Java的WebService服务通讯(.net framework 4.0)...

一、VB调用webservice常用方法:需要安装SoapToolkit30.EXE,并在工程中引用Microsoft Soap Type Library v3.0Private Sub CallWebService()Dim m_spClient As New SoapClient30 'SoapClient30对象实例化m_spClient.MSSoapInit "http://localho...

weixin_39840606的博客 683

手把手教你学Simulink--基于Simulink的高速公路自动驾驶场景仿真建模

特点车道保持:自动调整车辆方向以保持在车道中央。自适应巡航控制(ACC):根据前方车辆的速度自动调节车速。换道辅助:安全地变换车道以超过慢速行驶的车辆或准备驶离高速公路。紧急制动:检测潜在碰撞并采取措施避免事故。挑战安全性:确保所有功能在各种条件下都能可靠运行。实时性:处理大量传感器数据,并迅速做出反应。复杂性:集成多个子系统,包括感知、规划与控制。首先明确要模拟的任务内容。车辆需保持在车道内行驶。根据交通情况自动调整速度。安全地执行换道操作。在必要时实施紧急制动。

MHD0815的博客 247

asp. net(vb脚本)调用C#写的MobileBlockCTRL.dll档

1.aspxhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml" >    测试DLL                阿贵测试DLL                                                             

企业ERP数智化知识管理 1244

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# 学习技巧积累(不断更新中。。)

1. 写完代码让代码整齐些该用什么方法? 答:Ctrl + k + f2. .net语言写的DLL可以直接在添加引用中调用,例如C#写的DLL在vb.net中需要调用的时候    先把DLL 复制到BIN目录下,然后在vb.net中添加引用在代码里声明一下,就可以了        Private Sub Form1_Load(ByVal sender As System.Object, ByVal

Kevin'Blog 1442

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

CLS(公共语言规范)的CLSCompliant(跨语言调用)

.net的一个很重要的特性就是跨语言的编程,用C#写的dll可以在VB.net里调用,例如:用C#写的一个类,编译到dll中,然后在VB.net中调用: usingSystem;namespaceCLSsample{publicclassCLSTest{publicCLSTest(){}publicvoidABC(){Console.Wri...

weixin_34104341的博客 414

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# System.Drawing.Printing.PrintDocument设置打印机额外项的踩坑点

当我在配置打印机提供的额外配置项时老是不生效,导致抓耳挠腮,后面调试后发现SetHdevmode()使用的时Gdi.DEVMODE的标准类,导致额外添加的属性没法生效……所以我用VB写了个DLL提供C#调用解决,因为VB的生效且方便C#调用。

Six_Rabbit的博客 796

C#中dataGridView1控件数值显示效果

<br />我用C#程序调用存储过程,从SQL里查询一个报表数据到dataGridView1中,其中有几列是数值<br />不知道在dataGridView1中,能不能将后面多余的0去掉,希望显示效果如下:<br />查询的时候,用str(column,10,3)这样去处理一下.<br />我查询用的是调用存储过程:EXECUTE COMMON '20101001','20101030'<br />不知道怎么转,而且存储过程中,小数位置是不确定的!<br />在做PDA的C#开发中,发现datagrid没有

gtdg5475的专栏 1393
上一篇: ★★★★Excel-VBA操作文件四大方法之四
下一篇: VB中如何判断文件、文件夹是否存在
smallboy_5
博客等级 码龄21年 39粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值