1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. btn1: TButton;
  12. btn2: TButton;
  13. procedure btn1Click(Sender: TObject);
  14. procedure btn2Click(Sender: TObject);
  15.  
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. var
  23. Form1: TForm1;
  24.  
  25. function add(a:integer;b:integer):integer;cdecl;external 'mydllForDelphi.dll' ;
  26. function sub(a:integer;b:integer):integer;cdecl;external 'mydllForDelphi.dll' ;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. //mydllForDelphi.dll c++写的dll中的代码
  33. // extern "C" __declspec(dllexport) int add(int a, int b)
  34. //{
  35. // return (a + b);
  36. //}
  37. //
  38. //extern "C" __declspec(dllexport) int sub(int a, int b)
  39. //{
  40. // return (a - b);
  41. //}
  42.  
  43. procedure TForm1.btn1Click(Sender: TObject);
  44. begin
  45. self.caption:= inttostr(add(,));
  46. self.caption:=self.caption+'///' +inttostr(sub(,));
  47. end;
  48.  
  49. procedure TForm1.btn2Click(Sender: TObject);
  50. // function add(a:integer;b:integer):integer;cdecl;external 'mydllForDelphi.dll' ;
  51. type
  52. TIntFunc=function(a:integer;b:integer):integer;cdecl; //cdecl 不能少
  53. var
  54. Th: Thandle;
  55. Tf:TIntFunc;
  56. Tp,tp2:TFarProc ;
  57. begin
  58. Th:= loadlibrary('mydllForDelphi.dll');
  59. if Th > then
  60. try
  61. Tp:=GetProcAddress(Th, PChar('add'));
  62. if Tp<>nil then
  63. begin
  64. Tf:=TIntFunc(Tp);
  65. Self.Caption:=IntToStr(Tf(,)); {调用TestC函数}
  66. end;
  67.  
  68. Tp2:=GetProcAddress(Th, PChar('sub'));
  69. if Tp2<>nil then
  70. begin
  71. Tf:=TIntFunc(Tp2);
  72. Self.Caption:=Self.Caption+'|||'+IntToStr(Tf(,)); {调用TestC函数}
  73. end;
  74.  
  75. finally
  76. freelibrary(th);
  77. end;
  78.  
  79. end;
  80.  
  81. end.

Delphi调用c++写的dll (me)的更多相关文章

  1. 发现个delphi调用vc写的Dll中包括pchar參数报错奇怪现象

    发现个delphi调用vc写的Dll中包括pchar參数奇怪现象 procedure中的第一行语句不能直接调用DLL的函数,否则会执行报错,在之前随意加上条语句就不报错了奇怪! vc的DLL源代码地址 ...

  2. Delphi调用C++写的dll示例

    最近做一个读市民卡的项目,读卡器公司提供的读市民卡dll是用C++写的. 下面记录一些自己的心得,供需要的朋友参考. 声明dll函数要加上stdcall关键字,否则可能会报地址非法的错误. 代码: u ...

  3. Delphi 调用C/C++的Dll(stdcall关键字, 会导致函数名分裂. 此时函数名变成_stdadd@8)

    delphi调用C++写的Dll, 当然这个Dll要求是非MFC的Dll, 这样子才能被delphi调用. 根据C++定义函数的情况, Delphi有不同的相对应的处理方法.1. 声明中不加__std ...

  4. Delphi7程序调用C#写的DLL解决办法(转)

    近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个 ...

  5. Delphi7程序调用C#写的DLL解决办法

     近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一 ...

  6. Delphi 调用C# 编写的DLL方法

    近来,因工作需要,必须解决Delphi写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个“ ...

  7. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  8. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  9. QT调用C#写的Dll

    参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要 ...

随机推荐

  1. 指令——history

    作用:查看历史命令 一般用于查看已经输入执行过的命令,也可以作为自己练习时的指标衡量,因为在历史命令里有行号显示.

  2. oracle分组后取某组中最大的值

    查询username,根据fundcode分组,按照date倒序,取date最大的一条数据 select * from ( select username, row_number() over(par ...

  3. mencoder及ffmpeg的基本命令

    前段时间想在ubuntu下对视频进行格式转换,多方查找之后,接触了mencoder与ffmpeg. mencoder mencoder 是一款命令行方式的视频处理软件,是Mplayer自带的编码工具, ...

  4. centos 7 打开端口

    查看防火墙状态 systemctl status firewalld 或者 firewall-cmd --state 临时关闭防火墙测试是否是端口问题 systemctl stop firewalld ...

  5. (四)requests模块的cookies和代理操作

    基于requests模块的cookie操作 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取某个人“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到 ...

  6. linux X64函数参数传递过程研究

    基础知识 函数传参存在两种方式,一种是通过栈,一种是通过寄存器.对于x64体系结构,如果函数参数不大于6个时,使用寄存器传参,对于函数参数大于6个的函数,前六个参数使用寄存器传递,后面的使用栈传递.参 ...

  7. hex、Base64

    一.什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示. 二.作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转 ...

  8. 【剑指Offer】面试题10- II. 青蛙跳台阶问题

    题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返 ...

  9. openstack trove实例状态转换条件--Mitaka版本

    今天研究了一下trove的instance状态转换条件.发现其实设计的挺复杂的.后来思考了一下这样设计的原因.我觉得大致是因为,如果instance的状态全部来自于instance上跑的数据库服务本身 ...

  10. BZOJ:3231: [Sdoi2008]递归数列

    题解: 矩阵乘法,在矩阵中构造当前前缀和: 注意:for(int/long long ;;); #include<iostream> #include<cstdio> #inc ...