C#与vb6 com组件的互相调用方法
1.首先在vs2008中,新建项目选择c#项目->类库
编写一下代码
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
namespace JCCT.Security
{
/*应用于VB6的dll调用*/
//首先建立接口,这个是Com必须使用的
[ComVisible(true)]
[Guid("4B6FD86C-B096-4e6a-AC7F-442A51FA0776")]
public interface IEncrypt
{
string AESEncrypt(string plainStr);
string AESDecrypt(string encryptStr);
}
//写接口的实现
[ComVisible(true)]
[Guid("367BF149-DBB3-4184-9A5C-978CC8C10787")]
[ProgId("ClassLibrary1.AES")]
public class AES : IEncrypt
{
/// <summary>
/// 获取密钥
/// </summary>
private static string Key
{
get { return @"HJ(S<?l78242^&WL%#jCD8dkiI39(euw"; }
}
/// <summary>
/// 获取向量
/// </summary>
private static string IV
{
get { return @"mailto:L@uDe4Kf&amp;amp;amp;amp;#^j8E53"; }
}
/// <summary>
/// AES加密
/// </summary>
/// <param name="plainStr">明文字符串</param>
/// <returns>密文</returns>
public string AESEncrypt(string plainStr)
{
byte[] bKey = Encoding.UTF8.GetBytes(Key);
byte[] bIV = Encoding.UTF8.GetBytes(IV);
byte[] byteArray = Encoding.UTF8.GetBytes(plainStr);
string encrypt = null;
Rijndael aes = Rijndael.Create();
try
{
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))
{
cStream.Write(byteArray, 0, byteArray.Length);
cStream.FlushFinalBlock();
encrypt = Convert.ToBase64String(mStream.ToArray());
}
}
}
catch { }
aes.Clear();
return encrypt;
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="encryptStr">密文字符串</param>
/// <returns>明文</returns>
public string AESDecrypt(string encryptStr)
{
string decrypt = null;
Rijndael aes = Rijndael.Create();
try
{
byte[] bKey = Encoding.UTF8.GetBytes(Key);
byte[] bIV = Encoding.UTF8.GetBytes(IV);
byte[] byteArray = Convert.FromBase64String(encryptStr);
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write))
{
cStream.Write(byteArray, 0, byteArray.Length);
cStream.FlushFinalBlock();
decrypt = Encoding.UTF8.GetString(mStream.ToArray());
}
}
}
catch
{
decrypt = encryptStr;
}
aes.Clear();
return decrypt;
}
}
}
2.在文件AssemblyInfo.cs中,设置[assembly: ComVisible(true)],默认是false的,需要设置成true
3.选择项目属性,在生成标签卡中,勾选为com互操作注册.
4.生成项目dll文件。
Guid生成:在工具->创建Guid生成,格式选择第四种,点复制之后需要把两边的{}除掉.
5.注册.regasm ClassLibrary1.dll /tlb:ClassLibrary1.tlb
如果点项目右键属性:
可以编译后自动生成tlb,不需要再用vs.net命令生成。注意要以管理员身份运行vs.net.
6.在vb6 中引用ClassLibrary1.tlb文件,注意不是ClassLibrary1.dll文件
引用的话,在vb6编写时可以看到ClassLibrary1的类的方法。
Dim obj As Object
Set obj = CreateObject("ClassLibrary1.AES")
Form1.Text2.Text = obj.AESDecrypt(Form1.Text1.Text)
当用VB6生成的应用程序,拷贝到其它机上,又不能运行了,提示:ACTIVEX 不能创建对象。后终于找到解决办法:
用命令:regasm path +ClassLibrary.dll /tlb:ClassLibrary.tlb /codebase
如果用vb6生成dll文件在c#访问方法:
方法很简单 只需要生成dll, 然后在C#中引用就行了。
转载于:https://www.cnblogs.com/martin1009/archive/2012/02/09/2344254.html
C#与vb6 com组件的互相调用方法相关推荐
- Vue组件之间传值/调用方法的几种方式
组件之间传值/调用方法的几种方式 (一)父组件向子组件传值==props 1.在父组件中使用子组件的地方绑定数据 <children :message="message"&g ...
- vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全
vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...
- 两个龙的linux,Linux办公一条龙之组件间的调用
作为一个大型办公套件, OpenOffice(下文简称OO)各个功能模块之间数据的嵌入.调用是必不可少的,也是该办公套件强大功能的一种表现.那么在OO中如何实现各个功能模块之间的调用呢?又有几种方法呢 ...
- 【windows8开发】C++开发WinRT组件和JS调用
通过Windows Runtime(以下简称WinRT),可以用C++或C#或VB很方便的开发组件(dll),并且这些组件在用Javascript开发的Metro app中可以几乎无缝的被(javas ...
- Vue父组件与子组件传递事件/调用事件
1.Vue父组件向子组件传递事件/调用事件 <div id="app"><hello list="list" ref="child& ...
- 华为手机word插件加载失败_c#调用word的组件时失败解决方法
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败解决方法 Application当程序运行到这句时出现下面的错误:检索 ...
- vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法
vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...
- VUE3祖孙组件传值调用方法
VUE3祖孙组件传值调用方法 父子组件传参可以通过 props 和 emit 来实现,但是当组件的层次结构比较深时,props 和 emit 就太繁琐了.vue为了解决这个提出了 provide / ...
- vue3 setup中父组件通过Ref调用子组件的方法
在setup()钩子函数中调用 父组件 <template><div>我是父组件<children ref="childrenRef" />&l ...
最新文章
- Git 之fatal: remote origin already exists 错误解决办法(通俗易懂)
- Python中通过MyQR生成gif动图二维码
- hibernate 延迟加载的错误 failed to lazily initialize a collection of role
- 动态规划之一最长上升子序列LIS
- 感知算法论文(七):DFANet: Deep Feature Aggregation for Real-Time Semantic Segmentation(2019)
- tf.reshape()
- oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性
- c语言around用法,KET基础语法:介词among和around的用法及例句
- STL不是线程安全的啊
- 正则表达式学习笔记006--转义符的认识与应用
- android教师评价系统源码,教师评价系统
- python设置散点图点的大小_matplotlib - pyplot散点图标记大小
- PHPStorm 常用设置
- 2018Java面试题及答案【面试必看】
- python里面pow是什么意思_pow在python中是什么意思
- Java集成华为云对象存储
- 2020中国上市公司品牌价值榜20强发布
- 海伦公式 (利用三边长求三角形面积)
- php购物车面试题,PHP 购物车 session(非框架)
- 京东api接口php sdk,GitHub - ifwrong/jos-php-sdk: 京东php版本开放平台SDK
热门文章
- c++ createtoolhelp32snapshot取进程路径_理解进程和线程
- 湖南科技大学计算机学院宿舍,湖南科技大学计算机科学与工程学院
- 33 计算机维修,33.计算机硬件检测维修与数据恢复竞赛规程(修改)全解.doc
- 计算机专业审核作业指导书,专业审核作业指导书
- Java中单例模式—饿汉式和懒汉式
- 【人脸检测】+【五官定位】基于MATLAB的人脸检测系统
- 3Dslicer +VS2013编译介绍
- QMessageBox改变大小
- 降低成本,提高生产力—8句话讲清RPA的部署 1
- windows2003修改远程桌面连接数