C#想要调用Dephi接口方法,有两种解决办法

一、将Dephi程序编译成一个COM组件,然后在C#里引用COM组件,

二、非托管调用Dephi的DLL文件,代码如下:

Code
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;

Code
//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);
    }

Code
//利用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接口方法相关推荐

  1. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )

    文章目录 I . 子类调用父类总结 II . 子类调用父类方法 ( super ) III . 子类内部类调用父类方法 ( super@ ) IV . 子类选择调用不同的 父类 / 接口方法 ( su ...

  2. Java 调用第三方接口方法

    Java 调用第三方接口方法 一. 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1.通过统一资源 ...

  3. 易语言调用微信接口方法(通过wxDriver.dll命令)

    易语言调用微信接口方法(通过wxDriver.dll命令) 先看易语言DLL命令图: DLL命令源码: .版本 2' ***************************************** ...

  4. JAVA使用JCO实现调用SAP接口方法

    一.配置连接 (1)第一种连接配置 1.根据操作系统将sapjco3.dll文件放入C:\Windows\System32目录:  2.在项目中引入sapjco3.jar包:  3.创建Display ...

  5. c语言调用c 接口方法,C++调用C接口的实现示例

    C++调用C代码 一个C语言文件p.c #include void print(int a,int b) { printf("这里调用的是C语言的函数:%d,%d\n",a,b); ...

  6. 微信JS-SDK调用微信接口方法说明

    微信公众平台 微信JS-SDK说明文档 地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 概述 微信JS ...

  7. 【java调用webservice接口方法】

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...

  8. Java调用REST接口(get,post请求方法)

    网上的调用方法实例千奇百怪,以下为本人自己整理的Java调用rest接口方法实例,包含get请求和post请求,可创建工具类方便调用,其中get.post请求解决了入出参中文乱码问题. get方式请求 ...

  9. 在php中调用java接口吗,php 调用 java 接口

    php 需要开启 curl模块 /* * HTTP 请求函数封装 */ function http_request_cloudzone($url, $data){ //var_dump($url.&q ...

最新文章

  1. 有关java的一些话
  2. python自动翻译导学案_批量翻译踩过的坑--python
  3. MPB:西农郑伟-土壤水稳性团聚体微生物组样品制备方法
  4. SQL查询结果集对注入的影响及利用
  5. 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!
  6. html中设置文本框长度,Html的文本框怎样限制录入文本框的字节长度
  7. 在Linux下安装配置phpMyAdmin步骤
  8. android 之Activity的五种传值方式 (在从当前Activity跳转到目标Activity时的传值方式)
  9. 敏捷团队如何进行绩效考核?
  10. canoco5主成分分析步骤_基于R语言的主成分分析
  11. C#替换字符串起始/结尾指定的字符串
  12. LeetCode 206. 反转链表
  13. 字符串的全排列JAVA实现
  14. PHP接收到的$_POST数据里的邮箱符号@变成了%40
  15. Python+tkinter生成自动跳转到网页的二维码
  16. Transformer综述(A Survey on Vision Transformer) 阅读学习笔记(二)-- transformer在计算机视觉领域的发展和应用
  17. 【LGP5108】仰望半月的夜空
  18. 2012腾讯实习招聘笔试附加题1求解方法
  19. 河南二级分销系统开发|二级分销是如何分佣的?
  20. 7200 笔记本硬盘 444

热门文章

  1. c++循环读取多行文本文件
  2. Recipe terminated with error. vscode latex-workshop新的配置文件
  3. java系列9:对象数组
  4. PowerDesigner--创建业务流程模型
  5. Coinbase在上市前选择在Reddit线上路演
  6. SAP License:SAP生产订单中的统计指标运用
  7. SAP License:生产订单结算时候的几个差异
  8. 【学习】DataFrameSeries类【pandas】
  9. POJ 3734_Blocks
  10. 河南省队选拔 HAOI2015 解题报告