本周有个任务,实现一个数据上传接口,要求是VB6.0实现。
麻烦的是数据需要DES加密,网上没找到现成的DES VB6实现,于是加密的部分用C#实现,VB6代码调用,折腾一番,参考网上的教程,记录如下:
C#编写dll
1. 新建Class Library项目
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)
{
//...
}
//...
}
3.生成强名称key
打开VS命令行工具:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat
#Key的名字自定义
sn -k C:\MyKey.snk
项目 > Properties > Signing, 选择生成的强名称Key文件
4. 设置Assembly信息
项目 > Properties > Application > Assembly Information, 勾选“Make assembly COM-Visible”
项目 > Properties > Build, Configuration选择“Release”, 勾选“Register for COM interop”
5. 检查AssemblyInfo.cs文件
确保ComVisible为true, Assembly版本有具体的值
6. Build项目,生成DLL文件
至此,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
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