C#调用Dephi接口方法
C#想要调用Dephi接口方法,有两种解决办法
一、将Dephi程序编译成一个COM组件,然后在C#里引用COM组件,
二、非托管调用Dephi的DLL文件,代码如下:
Dephi接口方法:
function RSADecrypt(aPKey, aDKey, aData : PChar; aBuffer : pointer; aBufferSize: DWORD): integer; stdcall;
function RSAEncrypt(aPKey, aData : PChar; aBuffer : pointer; aBufferSize: DWORD): integer; stdcall;
function AESDecrypt(aData : PChar; aBuffer : pointer; aBufferSize: DWORD): integer;
//c#调用Dephi
public static class DrawChartFromDll
{
//调用非托管Dll,
[DllImport("rsaadpter.dll", EntryPoint = "RSAEncrypt", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
/// RSA加密
public static extern int RSAEncrypt(string aPKey, string aData,IntPtr aBuffer, int aBufferSize);
[DllImport("rsaadpter.dll", EntryPoint = "RSADecrypt", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
/// RSA解密
public static extern int RSADecrypt(string aPKey, string aDKey, string aData,IntPtr aBuffer, int aBufferSize);
[DllImport("rsaadpter.dll", EntryPoint = "AESDecrypt", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
/// 普通AES解密
public static extern int AESDecrypt(string aData,IntPtr aBuffer, int aBufferSize);
}
//利用ASP.NET指针,实现Dephi接口方法
string publicKey = dt.Rows[0]["RSAPKey"].ToString(); //本地公钥
string privateKey = dt.Rows[0]["RSADKey"].ToString(); //本地私钥
IntPtr ptr = Marshal.AllocHGlobal(2000); //非托管定义指针,指定长度2000
int resu = DrawChartFromDll.RSADecrypt(publicKey, privateKey, data, ptr, 2000); //Dephi接口方法,RSA解密私钥
data = ToStringFromIntPtr(ptr, resu); //获取RSA解密后字符串
/// <summary>
/// 从IntPtr指针,获取字符串
/// </summary>
/// <param name="ptr">指针</param>
/// <param name="result">获取字符串字节数</param>
/// <returns></returns>
private string ToStringFromIntPtr(IntPtr ptr,int result)
{
if (result <= 0)
{
Marshal.FreeHGlobal(ptr); //Marshal释放指针分配的内存
return "0";
}
byte[] b = new byte[result];
Marshal.Copy(ptr, b, 0, result); //
Marshal.FreeHGlobal(ptr); //Marshal释放指针分配的内存
return System.Text.Encoding.Default.GetString(b, 0, result); //获取解密后的私钥字符串
}
转载于:https://www.cnblogs.com/di305449473/archive/2009/01/14/1375434.html
C#调用Dephi接口方法相关推荐
- 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
文章目录 I . 子类调用父类总结 II . 子类调用父类方法 ( super ) III . 子类内部类调用父类方法 ( super@ ) IV . 子类选择调用不同的 父类 / 接口方法 ( su ...
- Java 调用第三方接口方法
Java 调用第三方接口方法 一. 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1.通过统一资源 ...
- 易语言调用微信接口方法(通过wxDriver.dll命令)
易语言调用微信接口方法(通过wxDriver.dll命令) 先看易语言DLL命令图: DLL命令源码: .版本 2' ***************************************** ...
- JAVA使用JCO实现调用SAP接口方法
一.配置连接 (1)第一种连接配置 1.根据操作系统将sapjco3.dll文件放入C:\Windows\System32目录: 2.在项目中引入sapjco3.jar包: 3.创建Display ...
- c语言调用c 接口方法,C++调用C接口的实现示例
C++调用C代码 一个C语言文件p.c #include void print(int a,int b) { printf("这里调用的是C语言的函数:%d,%d\n",a,b); ...
- 微信JS-SDK调用微信接口方法说明
微信公众平台 微信JS-SDK说明文档 地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 概述 微信JS ...
- 【java调用webservice接口方法】
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...
- Java调用REST接口(get,post请求方法)
网上的调用方法实例千奇百怪,以下为本人自己整理的Java调用rest接口方法实例,包含get请求和post请求,可创建工具类方便调用,其中get.post请求解决了入出参中文乱码问题. get方式请求 ...
- 在php中调用java接口吗,php 调用 java 接口
php 需要开启 curl模块 /* * HTTP 请求函数封装 */ function http_request_cloudzone($url, $data){ //var_dump($url.&q ...
最新文章
- 有关java的一些话
- python自动翻译导学案_批量翻译踩过的坑--python
- MPB:西农郑伟-土壤水稳性团聚体微生物组样品制备方法
- SQL查询结果集对注入的影响及利用
- 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!
- html中设置文本框长度,Html的文本框怎样限制录入文本框的字节长度
- 在Linux下安装配置phpMyAdmin步骤
- android 之Activity的五种传值方式 (在从当前Activity跳转到目标Activity时的传值方式)
- 敏捷团队如何进行绩效考核?
- canoco5主成分分析步骤_基于R语言的主成分分析
- C#替换字符串起始/结尾指定的字符串
- LeetCode 206. 反转链表
- 字符串的全排列JAVA实现
- PHP接收到的$_POST数据里的邮箱符号@变成了%40
- Python+tkinter生成自动跳转到网页的二维码
- Transformer综述(A Survey on Vision Transformer) 阅读学习笔记(二)-- transformer在计算机视觉领域的发展和应用
- 【LGP5108】仰望半月的夜空
- 2012腾讯实习招聘笔试附加题1求解方法
- 河南二级分销系统开发|二级分销是如何分佣的?
- 7200 笔记本硬盘 444