改写之前项目的方法,源代码是VB的,现在要改成C#,引用的dll也不知道是什么语言封装的,C#中不能直接添加引用,以上是背景VB中引用的源代码:
Declare Function Do_3Des Lib "3desmid.dll" (ByVal bType As Long, ByVal bMode As Long, ByVal sIn As String, ByVal sOut As String, ByVal datalen As Long, ByVal sKey As String, ByVal keylen As Long) As Long
项目中的声明和方法调用Dim hexCardSnr As String
Dim tmpKey As String * 16
Dim SecretSys As String * 32
Dim iRet As LongiRet = Do_3Des(0, 0, hexCardSnr, tmpKey, 8, SecretSys, 16)
在执行Do_3Des()方法的时候,hexCardSnr为16位的16进制转化的字符串,tmpKey和SecretSys均为空
执行后hexCardSnr的值不变,tmpKey为16位的字符串,SecretSys为32位的字符串(均不是空值)我的改写,因为tmpKey和SecretSys的值都发生了改变,我这里就把类型设定为了StringBuilder,没有初始值。[DllImport("3desmid.dll", EntryPoint = "Do_3Des", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = false,
CallingConvention = CallingConvention.Winapi)]
public static extern Int16 Do_3Des(Int32 bType, Int32 bMode, string sIn, StringBuilder sOut, Int32 datalen, StringBuilder sKey, Int32 keylen);
方法调用iRet = CardWriter.Do_3Des(0, 0, hexCardSnr1, tmpKey, 8, SecretSys, 16);执行后hexCardSnr的值与VB中保持一致,但是tmpKey的值与VB中不一致,位数也是16位,SecretSys的值为空了修改了很多次都没法获得一样的结果..各位大大能看出什么问题么,如果需要3desmid.dll方便研究,可以留下邮箱我发给你~谢谢了,分数有限,不好意思~
Declare Function Do_3Des Lib "3desmid.dll" (ByVal bType As Long, ByVal bMode As Long, ByVal sIn As String, ByVal sOut As String, ByVal datalen As Long, ByVal sKey As String, ByVal keylen As Long) As Long
项目中的声明和方法调用Dim hexCardSnr As String
Dim tmpKey As String * 16
Dim SecretSys As String * 32
Dim iRet As LongiRet = Do_3Des(0, 0, hexCardSnr, tmpKey, 8, SecretSys, 16)
在执行Do_3Des()方法的时候,hexCardSnr为16位的16进制转化的字符串,tmpKey和SecretSys均为空
执行后hexCardSnr的值不变,tmpKey为16位的字符串,SecretSys为32位的字符串(均不是空值)我的改写,因为tmpKey和SecretSys的值都发生了改变,我这里就把类型设定为了StringBuilder,没有初始值。[DllImport("3desmid.dll", EntryPoint = "Do_3Des", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = false,
CallingConvention = CallingConvention.Winapi)]
public static extern Int16 Do_3Des(Int32 bType, Int32 bMode, string sIn, StringBuilder sOut, Int32 datalen, StringBuilder sKey, Int32 keylen);
方法调用iRet = CardWriter.Do_3Des(0, 0, hexCardSnr1, tmpKey, 8, SecretSys, 16);执行后hexCardSnr的值与VB中保持一致,但是tmpKey的值与VB中不一致,位数也是16位,SecretSys的值为空了修改了很多次都没法获得一样的结果..各位大大能看出什么问题么,如果需要3desmid.dll方便研究,可以留下邮箱我发给你~谢谢了,分数有限,不好意思~
解决方案 »
- C# WinForm treeView 点击节点,然后在页面右部进行相应内容的改变
- 请问在WPF中怎样将一个WriteableBitmap对象设置为可写
- 如何定位DataRow在Dataview中的索引位置?
- 谁能帮我下啊!
- 请问哪位用过Bluetooth Framework VCL里面的bftowdthunk.dll这个组件
- 这个xml文档怎么读阿?晕,搞不出来
- 没有主窗口的应用程序
- 如何使用c#分析图片中各颜色块的高度?
- 用C#生成的WINDOWS安装程序,在安装到其他机器上的时候需要安装formwork2.0吗?
- 为什么总是爱把 C# 和 ASP 联系到一起?
- 请教各位高手如何重载messagebox和dialog,实现包含YesToAll的对话框
- 在线等 用以下算法把多个有序表合成一个有序表
Char[] SecretSys = new Char[32]
返回值还是空的
将编译后的 assembly 用工具(如 Red Gate's Reflector)打开,把语言设置成 C#
把代码拷贝出来
Dll发给我试试?
这样C#和vb中虽然显示同样的16位字串,但是传入dll函数中可能不是一样的编码序列.
试试从怎样能传入与vb中相同的字符编码序列这个角度着手有没有效果.
[email protected]
mwrf32.dll
multicoder.dll
楼主一并发下?
CharSet = CharSet.Ansi, ExactSpelling = false,
CallingConvention = CallingConvention.Winapi)]
public static extern Int32 Do_3Des(Int32 bType, Int32 bMode, string sIn, StringBuilder sOut, Int32 datalen, StringBuilder sKey, Int32 keylen);//StringBuilder 必须先初始化
StringBuilder sOut=new StringBuilder(16);
StringBuilder sKey=new StringBuilder(32);
CardWriter.Do_3Des(0, 0, hexCardSnr1, sOut, 8, sKey, 16);
我没学过VB,这个VB源代码由一个主程序和几个子程序(生成DLL后供主程序调用)构成,可以具体问下怎么实现上面说的操作么?
那个工具是针对 .NET assembly 的,用哪个语言没关系
输入是"0B008FB5F4FF704A",
输出tmpKey好象是个随机的16位串,SecretSys总是空.
我的意思是反编译原来的代码,应为 Reflector 可以反编译成不同语言,就可以直接得到 C# 代码了。
改用BSTR,不为空,但和你的结果不一样,象序列号一样的32个字符,还有小横杠的
建议楼主发到VB版块去问问(注意不是VB.Net,是VB6)