易截截图软件、单文件、免安装、纯绿色、仅160KB

C++如何调用delphi制作的dll


一、概述及示例代码
Delphi中包括许多已经封装好的类及控件,其中的非可视化控件库以功能方式划分可处理诸多应用需求。若使用C++实现系统时对某些功能简单调用delphi中现成的库时即可。因此将delphi中的库以DLL形式封装好之后如何将方法导出可供C++调用是本文记录的重点。C++调用的方式有多种,在这里只讨论一种静态编译方式,一是为了代码的规范可读性,二是防止接口变化带来的维护问题。
Delphi对外接口单元:
library ftpUpload;
uses
  SysUtils,
  Classes,
dialogs,
  FileUpLuo in
'FileUpLuo.pas';
 
var
  mTask :
TFtpUpFileLuo;
  taskParam :
SUpTask;
{$R *.res}
 
function SendFile_luo(szSrcFile: pchar; szDesFile:
pchar;
                     
szFtpServer: pchar; strUsername: pchar;
                      strPassword: pchar): Integer;
export; stdcall;
begin
    mTask :=
TFtpUpFileLuo.Create(true);
   
    with
taskParam do
      begin
        szSrc :=
szSrcFile;
        szDes :=
szDesFile;
        szServer
:= szFtpServer;
       
szUsername := strUsername;
       
szPassword := strPassword;
      end;
 
    result :=
mTask.TransFile(taskParam);
   
mTask.Resume;
end;
 
function GetUpPercent(nCmd: Integer) : Integer;
export; stdcall;
begin
 
mTask.SetCommand(nCmd);
  result :=
mTask.GetUpStatus;
end;
 
exports
SendFile_luo index 1,
GetUpPercent index 2;
 
begin
 
end.
 
二、编译及生成LIB文件
1)调试、编译生成ftpUpload.dll文件;
2)Impdef.exe ftpUpload


相关文档:

如何使C,C++编译器都可以调用C写的DLL

    由于C++编译器需要支持函数的重载,会改变函数的名称,与标准C中函数名称不同。然而dll的导出函数通常是标准C定义的,让标准C编写的dll函数定义在C和C++编译器下都能编译通过,通常会使用以下的格式:(这个格式在很多成熟的代码中很常见)
#ifdef __cplusplus extern "C" 

#endif
// ......

标准C函数之 getchar

getchar函数是定义在 stdio.h 文件中的一个输入函数。它从标准输入设备(一般是键盘)中读取一个字符。
在实际工作中,它是这样完成的:
键盘输入到计算机中的字符并不是立刻送到内存中指定位置,而是会首先缓存到一个缓冲区中。这个是计算机为了弥补不同硬件之间速度差距,而惯用的伎俩。
当在程序中第一次调用 getchar ......

《C专家编程》2.3C语言中的符号重载

C语言中许多符号是被“重载”的,有些关键字也被重载而具有好几种意义,值得注意的几个符号如下:
符号      意义
static   在函数内部,表示该变量的值在各个调用间一直保持延续性
            在函数这一级,表示该函数只对本文件可见
extern 用于 ......

C语言回调函数使用

什么是回调函数?
  简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
  为什么要使用回调函数?
  因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号