背景
小編為了使用C#去模仿PB代碼的加密算法,結果發現PB算法中,的long類型只有21億,實際上傳入的數值達到了78億,造成了數據溢出,精度丟失的情況。
然而PB的算法已經使用C#不可以還原(C#的long類型比PB的long類型大多了)。想到是否可以使用C#去調用PB的加密,經過一番波折終於成功了。
先來一張最終效果圖:
C#

PB:

步驟
首先得PB去生成COM組件
1、新建一個工作空間

2、新建一個COM組件

各種下一步









3、然后完成后,點擊函數列表,右鍵add添加函數

add函數代碼就一句

4、然后代碼完成后,生成dll

5、生成后如下圖

注冊PB控件
1、按win+r調出運行

2、輸入cmd回車調出cmd命令窗體

3、使用regsvr32 你的路徑\genapp.dll


C#添加並調用pb的com組件
1、回到C#的ide,右鍵添加引用
如下圖選擇左邊的com,注冊成功后,PB寫的com組件會顯示在里面
選擇genapp.dll,添加
2、項目屬性的目標平台設置成x86

3、C#代碼如下
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; using genapp; namespace callPBdll { public partial class Form1 : Form { [DllImport(@"genapp.dll", CharSet = CharSet.Ansi)] public static extern long add(long num1, long num2); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { genapp.COClass_n_genappClass a = new COClass_n_genappClass(); MessageBox.Show(a.add(int.Parse(txtNum1.Text), int.Parse(txtNum2.Text)).ToString()); } private void button2_Click(object sender, EventArgs e) { MessageBox.Show(callPBEncrypt.Bridge.Encrypt("1")); } } }
4、OK啦

5、祝各位女生節快樂,預祝婦女節快樂(/(ㄒoㄒ)/~~可惜明天沒有假)
