C#编写dll, VB6.0调用

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

麻烦的是数据需要DES加密,网上没找到现成的DES VB6实现,于是加密的部分用C#实现,VB6代码调用,折腾一番,参考网上的教程,记录如下:

C#编写dll

1. 新建Class Library项目

C#编写dll, VB6.0调用_第1张图片

 2. 编写接口和继承

必须用接口,否则VB无法调用。

接口和类都要赋值GUID

[Guid("A8FE854A-B421-46F7-9711-DDC63417C6D3")]
public interface ICrypto
{
   string EncryptData(string data, string key);
}

[Guid("8C4610BF-B6EA-445D-8B9E-53CF54460A82")]
public class Crypto : ICrypto
{
    public string EncryptData(string data, string key)
    {
       //...
    }

    //... 
}

C#编写dll, VB6.0调用_第2张图片

 C#编写dll, VB6.0调用_第3张图片

 3.生成强名称key

打开VS命令行工具:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat

#Key的名字自定义
sn -k C:\MyKey.snk 

C#编写dll, VB6.0调用_第4张图片

项目 > Properties > Signing, 选择生成的强名称Key文件

 C#编写dll, VB6.0调用_第5张图片

 4. 设置Assembly信息

项目 > Properties > Application > Assembly Information, 勾选“Make assembly COM-Visible”

C#编写dll, VB6.0调用_第6张图片

项目 > Properties > Build,  Configuration选择“Release”, 勾选“Register for COM interop”

 C#编写dll, VB6.0调用_第7张图片

5. 检查AssemblyInfo.cs文件

确保ComVisible为true, Assembly版本有具体的值

C#编写dll, VB6.0调用_第8张图片

6. Build项目,生成DLL文件

C#编写dll, VB6.0调用_第9张图片

 至此,DLL部分的工作完成。

为什么需要有以上这些有点繁琐的步骤呢?接口,GUID,强名称key这些。后来查了一下,原来就是为了要支持COM而进行的一些config。

目标机上注册dll

开发机上,VS已经自动把dll注册过了。但是目标机上需要单独注册。

.NET的dll,需要用.NET Framwork中的RegAsm.exe来注册。

先确保目标机上安装了.NET Framework。

C:\Windows\Microsoft.NET\Framework\v4.0.30319>RegAsm.exe /codebase C:\Encrypt.dll

C#编写dll, VB6.0调用_第10张图片

VB调用dll

Private Declare Function func Lib "C:\Encrypt.dll" () As String

Set CryptoObj = CreateObject("Encrypt.Crypto")
data = CryptoObj.EncryptData(data, key)

参考:https://www.cnblogs.com/bob79/archive/2012/11/06/2757263.html

你可能感兴趣的:(c#,microsoft,开发语言)