C#以其简单易用,功能强大深受大家喜爱.PowerBuilder作为C/S的MIS开发工具,十分简单灵活,开发时间短,开发及维护成本低,一直是中小企业信息管理系统的首选开发工具.但是PB的局限性限制了它进一步的发展,这个就不多说了,玩PB的朋友都清楚.PB如何调用C#写的DLL,这个兴趣一上来,就忍不住要解决它.经过多方查找资料加上自己写代码测试,算是解决这个难题.下面列出开发步骤及各种设置选项(开发工具VS2008SP1+PB9.0-8836)
首先我们打开VS2008,新建一个项目,如图
接着我们双击解决方案下面的属性文件夹[Properties],系统将打开类型的属性设置窗口,选择[应用程序]
点击程序集信息按钮,弹出信息窗口,选中[使程序集COM可见],如图
接下来选择[生成]标签 ,选中[为COM互操作注册]
选择[签名]标签,选中[为程序集签名]-->[选择强名称密钥文件]-->[新建],输入你的密钥名称,去掉[使用密码保护密钥文件],如图
OK,到这里配置完成,下面给出代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Security.Cryptography; using System.IO; using System.Web.SessionState; using System.Runtime.InteropServices;
namespace encry { [Guid("FF6B4D57-F34E-49ec-9A3B-D0A17B59F78A")] public interface IEncryption { [DispId(1)] string EncryptString(string encryptString, string encryptKey); [DispId(2)] string DecryptString(string decryptString, string decryptKey); [DispId(3)] string md5(string str, int code); }
[Guid("531D2D13-11DE-41a8-A788-CB51B5642CCE"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IEncryption))] public class encryption : IEncryption { #region "3des加密字符串" ///
#region "3des解密字符串" ///
#endregion
#region "MD5加密" ///
if (code == 32) { strEncrypt = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5"); }
return strEncrypt; } #endregion } }
生成一下,在你的程序目录下面bin文件夹下有一个debug文件夹,生成的DLL就在里面.这个时候pb还不能调用这个DLL.
在这里说明一下,代码里面的GUID是怎样生成的.
打开你的VS2008命令提示,如图
输入[guidgen],按下回车
选着选项4,注册格式,点击[New GUID],将生成新的序列号,点击[Copy]复制序列号,粘贴的时候记得将前后的花括号去掉
要想pb能够调用这个DLL,关键在于要注册这个DLL,注册过程如下,打开VS2008命令提示,打开你的DLL所在的路径,然后输入如下命令
regasm 你的DLL名称.DLL /tlb:你的DLL名称.tlb,看图
如果成功注册将会出现上面的画面.
接上来是我们PB如何调用这个DLL了.看下图(调用方式为OLE)
增加一个实例变量
OLEObject encryption
在窗体的Open()事件里面写下以下代码
encryption = Create OLEObject encryption.ConnectToNewObject("encry.encryption")
"encry" 是你C#写的DLL的命名空间的名称
"encryption"是你的DLL的类名称.别搞错了.
在[执行MD5加密]的按钮脚本写如下代码
long ll_status string ls_text string ls_dotext
ls_text = sle_1.Text ls_dotext = encryption.md5(ls_text,32) sle_2.Text = ls_dotext
如果一切OK的话,会出现下面的画面
至此,程序结束.可以跟大家共同参考,学习.