用C#生成.dll 供VB6的开发人员调用

VB6 同时被 2 个专栏收录
2 篇文章 0 订阅
33 篇文章 1 订阅

目录

用C#生成.dll 供VB6的开发人员调用

C#生成基于COM的DLL供VB调用


用C#生成.dll 供VB6的开发人员调用

里面有两个方法   
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.csdn.net/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("要解密内容","密码") // 解密

转自:https://blog.csdn.net/xiaoxiaohai123/article/details/1946237


C#生成基于COM的DLL供VB调用

用Visual C#生成的DLL文件已经和以前的DLL文件有了本质上的区别。VisualC、Delphi或者VB等编程语言来编写的DLL文件,在编译完成以后,产生DLL文件已经是一个可以直接供计算机使用的二进制文件。但用Visual C#编译器生成的受托管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实质上是一种中间语言(IL)代码,需要经过NGWS (Next

Generation Windows Services) runtime的即时编译器(即JIT)进行编译。

一、 新建项目

打开 VisualStudio2008 ,新建一项目,取名CSharpCOMDemo,项目类型【Visual C#】-【类库】

新建一个类取名为ClassMath,输入如下代码

注意类上的属性,对com可见和生成com类型。

using System.Runtime.InteropServices;  
  
namespace CSharpCOMDemo  
{  
    [ComVisible(true)]  
    [ClassInterface(ClassInterfaceType.AutoDual)]   
    public class ClassMath  
    {  
        public ClassMath()  
        {  
        }    
        public int lmSub(int a,int b)  
        {  
            return a - b;  
        }  
               
        public int lmAdd(int a, int b)  
        {  
            return a + b;  
        }  
    }  
}

二 、生成项目
修改项目属性,使项目生成的同时生成 tlb类型库

右键点击项目-【属性】-【生成】-【为COM互操作注册】前打勾

这里也可点击【签名】为程序集签名。签名方法也比较简单

操作方法:【签名】-【为程序集签名】打勾,选择密钥文件即可。如果没有密钥文件,这里也可方便地新建一个密钥文件。

本例不作签名。

三、 注册类型库

    输入regasm CSharpCOMDemo.dll /tlb: CSharpCOMDemo.tlb /codebase,将类型库导入到注册表。提示成功注册了类型,说明操作成功,此时TestCom .dll可以作为一个com来使用。
四 、添加dll到GAC(全局程序集缓存 )
    输入gacutil /i CSharpCOMDemo.dll,将此.net程序集添加到GAC。将程序集添加到GAC后以让系统管理员通过用户权限来控制Assembly的访问。本例也不做添加。

 转自:https://blog.csdn.net/mrliming/article/details/5432736

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值