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;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组件的互相调用方法相关推荐

  1. Vue组件之间传值/调用方法的几种方式

    组件之间传值/调用方法的几种方式 (一)父组件向子组件传值==props 1.在父组件中使用子组件的地方绑定数据 <children :message="message"&g ...

  2. vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全

    vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...

  3. 两个龙的linux,Linux办公一条龙之组件间的调用

    作为一个大型办公套件, OpenOffice(下文简称OO)各个功能模块之间数据的嵌入.调用是必不可少的,也是该办公套件强大功能的一种表现.那么在OO中如何实现各个功能模块之间的调用呢?又有几种方法呢 ...

  4. 【windows8开发】C++开发WinRT组件和JS调用

    通过Windows Runtime(以下简称WinRT),可以用C++或C#或VB很方便的开发组件(dll),并且这些组件在用Javascript开发的Metro app中可以几乎无缝的被(javas ...

  5. Vue父组件与子组件传递事件/调用事件

    1.Vue父组件向子组件传递事件/调用事件 <div id="app"><hello list="list" ref="child& ...

  6. 华为手机word插件加载失败_c#调用word的组件时失败解决方法

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败解决方法 Application当程序运行到这句时出现下面的错误:检索 ...

  7. vue中组件之间调用方法——子组件调用父组件的方法 父组件调用子组件的方法

    vue中组件之间调用方法--子组件调用父组件的方法 & 父组件调用子组件的方法 1.vue中子组件调用父组件的方法 1.1.第一种方法是直接在子组件中通过this.$parent.event来 ...

  8. VUE3祖孙组件传值调用方法

    VUE3祖孙组件传值调用方法 父子组件传参可以通过 props 和 emit 来实现,但是当组件的层次结构比较深时,props 和 emit 就太繁琐了.vue为了解决这个提出了 provide / ...

  9. vue3 setup中父组件通过Ref调用子组件的方法

    在setup()钩子函数中调用 父组件 <template><div>我是父组件<children ref="childrenRef" />&l ...

最新文章

  1. Git 之fatal: remote origin already exists 错误解决办法(通俗易懂)
  2. Python中通过MyQR生成gif动图二维码
  3. hibernate 延迟加载的错误 failed to lazily initialize a collection of role
  4. 动态规划之一最长上升子序列LIS
  5. 感知算法论文(七):DFANet: Deep Feature Aggregation for Real-Time Semantic Segmentation(2019)
  6. tf.reshape()
  7. oracle模拟重叠事务,ORACLE的事务读一致性与语句读一致性
  8. c语言around用法,KET基础语法:介词among和around的用法及例句
  9. STL不是线程安全的啊
  10. 正则表达式学习笔记006--转义符的认识与应用
  11. android教师评价系统源码,教师评价系统
  12. python设置散点图点的大小_matplotlib - pyplot散点图标记大小
  13. PHPStorm 常用设置
  14. 2018Java面试题及答案【面试必看】
  15. python里面pow是什么意思_pow在python中是什么意思
  16. Java集成华为云对象存储
  17. 2020中国上市公司品牌价值榜20强发布
  18. 海伦公式 (利用三边长求三角形面积)
  19. php购物车面试题,PHP 购物车 session(非框架)
  20. 京东api接口php sdk,GitHub - ifwrong/jos-php-sdk: 京东php版本开放平台SDK

热门文章

  1. c++ createtoolhelp32snapshot取进程路径_理解进程和线程
  2. 湖南科技大学计算机学院宿舍,湖南科技大学计算机科学与工程学院
  3. 33 计算机维修,33.计算机硬件检测维修与数据恢复竞赛规程(修改)全解.doc
  4. 计算机专业审核作业指导书,专业审核作业指导书
  5. Java中单例模式—饿汉式和懒汉式
  6. 【人脸检测】+【五官定位】基于MATLAB的人脸检测系统
  7. 3Dslicer +VS2013编译介绍
  8. QMessageBox改变大小
  9. 降低成本,提高生产力—8句话讲清RPA的部署 1
  10. windows2003修改远程桌面连接数