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.def ftpUpload.dll  生成DEF文件;

3)修改DEF文件

LIBRARY     FTPUPLOAD.DLL

 

EXPORTS

    GetUpPercent@4                   @2  

SendFile_luo@20                   @1

以上所示是DEF文件内容,其中红体字部分(@4,@20)是修改添加的内容,它的规则是方法参数列表中的参数个数乘以4即可

4lib.exe /def:ftpUpload.def   生成LIB文件

5)编写C++ header文件

#ifndef  LIB_FTP_UPLOAD_LUO_091016

#define LIB_FTP_UPLOAD_LUO_091016

 

extern "C" __declspec(dllexport)

int __stdcall SendFile_luo(char *szsrc, char *szdes, char *szserver,

                                                 char *szusername, char *szpassword);

 

extern "C" __declspec(dllexport)

int __stdcall GetUpPercent(int nCmd);

 

#endif

6)在VC工程中加入头文件与LIB文件编译成功即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值