调用SuperDll

接上一篇Delphi创建Superdll,将生成的SuperDll.dll文件复制到本工程路径下,创建如下代码进行Superdll各个接口的测试。

创建uSuperDll.pas单元,用来对接DLL,具体看如下代码;

创建Delphi WinFrm窗体,引用uSuperDll.pas单元,窗体界面如下:

WinFrm uMain.pas单元代码:

 unit uMain;

 interface

 uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, StdCtrls, RzEdit, cxStyles, cxCustomData, cxGraphics,
cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid, RzTabs; type
TFrmMain = class(TForm)
mmDsp: TRzMemo;
btnSuperDll_Init: TRzBitBtn;
btnSuperDll_Ftp_Put: TRzBitBtn;
btnSuperDll_Ftp_Get: TRzBitBtn;
btnSuperDll_EMail_Send: TRzBitBtn;
pcMain: TRzPageControl;
tsOne: TRzTabSheet;
cxGridOneDBTableView1: TcxGridDBTableView;
cxGridOneLevel1: TcxGridLevel;
cxGridOne: TcxGrid;
btnSaveToExcel: TRzBitBtn;
cxGridOneDBTableView1Column1: TcxGridDBColumn;
cxGridOneDBTableView1Column2: TcxGridDBColumn;
cxGridOneDBTableView1Column3: TcxGridDBColumn;
cxGridOneDBTableView1Column4: TcxGridDBColumn;
cxGridOneDBTableView1Column5: TcxGridDBColumn;
cxGridOneDBTableView1Column6: TcxGridDBColumn;
cxGridOneDBTableView1Column7: TcxGridDBColumn;
cxGridOneDBTableView1Column8: TcxGridDBColumn;
cxGridOneDBTableView1Column9: TcxGridDBColumn;
cxGridOneDBTableView1Column10: TcxGridDBColumn;
procedure btnSuperDll_InitClick(Sender: TObject);
procedure MsgDsp(sStr: string);
procedure btnSuperDll_Ftp_PutClick(Sender: TObject);
procedure btnSuperDll_Ftp_GetClick(Sender: TObject);
procedure btnSuperDll_EMail_SendClick(Sender: TObject);
procedure btnSaveToExcelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
FrmMain: TFrmMain; implementation
uses
uSuperDll;
{$R *.dfm} procedure TFrmMain.MsgDsp(sStr: string);
begin
mmDsp.Lines.Add('[' + sStr + ']-[' + FormatDateTime('YYYY-MM-DD hh:mm:ss zzz', Now()) + ']');
end; procedure TFrmMain.btnSuperDll_InitClick(Sender: TObject);
var
bResult: Boolean;
begin
MsgDsp('系统初始化,请稍等!');
bResult := False;
try
bResult := SuperDll_Init;
if bResult then
begin
btnSuperDll_Ftp_Put.Enabled := True;
btnSuperDll_Ftp_Get.Enabled := True;
btnSuperDll_EMail_Send.Enabled := True;
btnSaveToExcel.Enabled := True;
MsgDsp('初始化成功!');
end
else
begin
btnSuperDll_Ftp_Put.Enabled := False;
btnSuperDll_Ftp_Get.Enabled := False;
btnSuperDll_EMail_Send.Enabled := False;
btnSaveToExcel.Enabled := False;
MsgDsp('初始化失败!');
end;
except
on E: Exception do
begin
MsgDsp('读取动态链接库失败,错误信息[' + E.Message + '],请知悉!');
end;
end;
end; procedure TFrmMain.btnSuperDll_Ftp_PutClick(Sender: TObject);
var
sType, sUsername, sPassword, sHost, sDir, sSouFilePath: string;
bResult: Boolean;
begin
bResult := False;
MsgDsp('参数初始化,请稍等!');
sType := 'Put';
sUsername := 'xxx';
sPassword := 'xxx';
sHost := 'xxx';
sDir := '/xxx/';
sSouFilePath := 'C:\Tmp\Test.txt';
MsgDsp('参数初始化完成!');
try
MsgDsp('文件上传中,请稍等!');
bResult := SuperDll_Ftp_PutOrGet(sType, sUsername, sPassword, sHost, sDir, sSouFilePath, sSouFilePath);
if bResult then
begin
MsgDsp('上传成功!');
end
else
begin
MsgDsp('上传失败!');
end;
except
on E: Exception do
begin
MsgDsp('上传失败,读取动态链接库失败,错误信息[' + E.Message + '],请知悉!');
end;
end;
end; procedure TFrmMain.btnSuperDll_Ftp_GetClick(Sender: TObject);
var
sType, sUsername, sPassword, sHost, sDir, sDesFilePath: string;
bResult: Boolean;
begin
bResult := False;
MsgDsp('参数初始化,请稍等!');
sType := 'Get';
sUsername := 'xxx';
sPassword := 'xxx';
sHost := 'xxx';
sDir := '/xxx/';
sDesFilePath := 'C:\Tmp\1.csv';
MsgDsp('参数初始化完成!');
try
MsgDsp('文件下载中,请稍等!');
bResult := SuperDll_Ftp_PutOrGet(sType, sUsername, sPassword, sHost, sDir, sDesFilePath, sDesFilePath);
if bResult then
begin
MsgDsp('下载成功!');
end
else
begin
MsgDsp('下载失败!');
end;
except
on E: Exception do
begin
MsgDsp('下载失败,读取动态链接库失败,错误信息[' + E.Message + '],请知悉!');
end;
end;
end; procedure TFrmMain.btnSuperDll_EMail_SendClick(Sender: TObject);
var
vSubject, vFrom, vRecipients, vCCList, vBccList, vBody, vAttachment, vUsername, vPassword, vHost: string;
bResult: Boolean;
begin
bResult := False;
MsgDsp('参数初始化,请稍等!');
vBody := '-------------------------------------SYSTEM TEST----------------------------------' + ## +
'----------------------------------------------------------------------------------' + ## +
'It is Function - [SuperDll_EMail_Send] Test, please do not reply deractly, thanks.';
vSubject := 'SuperDll_EMail_Send Test';
vFrom := 'xxx';
vRecipients := 'xxx';
vCCList := 'xxx';
vBccList := 'xxx';
vAttachment := 'C:\Tmp\1.csv';
vUsername := 'xxx';
vPassword := 'xxx';
vHost := 'xxx';
MsgDsp('参数初始化完成!');
try
MsgDsp('邮件发送中,请稍等!');
bResult := SuperDll_EMail_Send(vSubject, vFrom, vRecipients, vCCList, vBccList, vBody, vAttachment, vUsername, vPassword, vHost);
if bResult then
begin
MsgDsp('邮件发送成功!');
end
else
begin
MsgDsp('邮件发送失败!');
end;
except
on E: Exception do
begin
MsgDsp('邮件发送失败,调用动态链接库失败,错误信息[' + E.Message + '],请知悉!');
end;
end;
end; procedure TFrmMain.btnSaveToExcelClick(Sender: TObject);
var
bResult: Boolean;
sFullPathName: string;
od: TOpenDialog;
begin
try
od := TOpenDialog.Create(nil);
MsgDsp('正在尝试导出Excel,请稍后!');
od.Title := '选中您要保存文件的位置';
od.Filter := '*.xls';
od.Execute;
sFullPathName := od.FileName;
if Pos('.xls', sFullPathName) <= then
begin
sFullPathName := sFullPathName + '.xls';
end;
bResult := SaveCxGridToExcel(cxGridOne, sFullPathName);
if bResult then
begin
MsgDsp('导出Excel成功!');
end
else
begin
MsgDsp('导出Excel失败,请确认!');
end;
od.Free;
except
on E: Exception do
begin
od.Free;
MsgDsp('导出Excel失败,调用动态链接库失败,错误信息[' + E.Message + '],请知悉!');
Exit;
end;
end; try
od := TOpenDialog.Create(nil);
MsgDsp('正在尝试导出CSV,请稍后!');
od.Title := '选中您要保存文件的位置';
od.Filter := '*.csv';
od.Execute;
sFullPathName := od.FileName;
if Pos('.xls', sFullPathName) <= then
begin
sFullPathName := sFullPathName + '.xls';
end;
bResult := SaveCxGridToCSV(cxGridOne, sFullPathName);
if bResult then
begin
MsgDsp('导出CSV成功!');
end
else
begin
MsgDsp('导出CSV失败,请确认!');
end;
od.Free;
except
on E: Exception do
begin
od.Free;
MsgDsp('导出CSV失败,调用动态链接库失败,错误信息[' + E.Message + '],请知悉!');
Exit;
end;
end; end; end.

uSuperDll.pas代码如下:

 unit uSuperDll;

 interface

 uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IniFiles, StrUtils, cxGrid; function SuperDll_Init: Boolean; stdcall; //1: 初始化函数
function SuperDll_Ftp_PutOrGet(vType: string; var vUserName: string; var vPassWord: string; var vHost: string; var vDir: string; var vDesFilePath: string; vSouFilePath: string): Boolean; stdcall; //2: FTP文件上传下载
function SuperDll_EMail_Send(vSubject: string; var vFrom: string; var vRecipients: string; var vCCList: string; var vBccList: string; var vBody: string; var vAttachment: string; var vUsername: string; var vPassword: string; var vHost: string): Boolean; stdcall; //3: 邮件发送
function SaveCxGridToExcel(vCxGrid: TcxGrid; var vFullPathName: string): Boolean; stdcall;
function SaveCxGridToCSV(vCxGrid: TcxGrid; var vFullPathName: string): Boolean; stdcall; implementation
function SuperDll_Init; external 'SuperDll.dll';
function SuperDll_Ftp_PutOrGet; external 'SuperDll.dll';
function SuperDll_EMail_Send; external 'SuperDll.dll';
function SaveCxGridToExcel; external 'SuperDll.dll';
function SaveCxGridToCSV; external 'SuperDll.dll';
end.

作者:Jeremy.Wu
  出处:https://www.cnblogs.com/jeremywucnblog/

  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Delphi - 调用SuperDll 持续更新的更多相关文章

  1. Delphi - 创建SuperDll 持续更新

    Delphi SuperDll 作为一名5年的Delpher,一直认为Delphi是桌面应用的王者,我相信其他的Delpher也这么认为. 但是,慢慢的我发现普通方式的Delphi开发会造成代码的严重 ...

  2. React Native之坑总结(持续更新)

    React Native之坑总结(持续更新) Genymotion安装与启动 之前我用的是蓝叠(BlueStack)模拟器,跑RN程序也遇到了一些问题,都通过搜索引擎解决了,不过没有记录. 但是Blu ...

  3. 干货!IT小伙伴们实用的网站及工具大集合!持续更新!

    1.Git 还在担心自己辛辛苦苦写的代码被误删了吗?还在担心自己改错了代码不能挽回吗?还在苦恼于多人开发合作找不到一个好的工具吗?那么用Git就对 了,Git是一个开源的分布式版本控制系统,用以有效. ...

  4. ( 译、持续更新 ) JavaScript 上分小技巧(四)

    后续如有内容,本篇将会照常更新并排满15个知识点,以下是其他几篇译文的地址: 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第二篇地址:( 译.持续更新 ) JavaScr ...

  5. ( 译、持续更新 ) JavaScript 上分小技巧(三)

    最近家里杂事较多,自学时间实在少的可怜,所以都在空闲时间看看老外写的内容,学习之外顺便翻译分享~等学习的时间充足些再写写自己的一些学习内容和知识点分析(最近有在接触的:复习(C#,SQL).(学习)T ...

  6. ( 译、持续更新 ) JavaScript 上分小技巧(二)

    考虑到文章过长,不便于阅读,这里分出第二篇,如有后续,每15个知识点分为一篇... 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第三篇地址:( 译.持续更新 ) Java ...

  7. ( 译、持续更新 ) JavaScript 上分小技巧(一)

    感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...

  8. Android系统兼容性问题(持续更新)

    相信开发过一段Android的都被Android中的兼容性问题给折腾过,有时这确实很无奈,Android被不同的厂商改的七零八落的.本文主要总结下本人在实际的项目开发过程中所遇到的兼容性问题,以及最后 ...

  9. java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...

随机推荐

  1. [BZOJ2821][Luogu4135] 作诗

    由于BZOJ这题要contact lydsy2012@163.com,所以就放个洛谷的传送门(我木有BZOJ权限号啊0.0) 诶?这不是莫队裸题?? 等等--这题强制在线欸,没办法莫队了,肿么破? 之 ...

  2. CSPS模拟 86

    看见异或两个字就孩怕 T1 按位? T2 这道异或稍水啊233 貌似可以打表找找规律 emm七种转移,有重复刷表 优化一下? T3 skyh已经接了2杯水了(实际情况他已经ak了) cbx开始抬头傻笑 ...

  3. P2893 [USACO08FEB]修路

    直入主题. 农夫约翰想改造一条路,原来的路的每一段海拔是Ai,修理后是Bi花费|A_i–B_i|.我们要求修好的路是单调不升或者单调不降的.求最小花费. 数据范围:n<=2000,0≤ Ai ≤ ...

  4. php 全文搜索搜索-讯搜使用

    相信很多朋友遇到过,需要全文搜索的场景,百度了一圈发现了一个xunsearch 首先本地采集了1万篇文章,发现效率还可以. 使用上也很简单,直接上代码 //接收关键词 $xs = new XS('xp ...

  5. python关于urllib库与requests

    对于这两个库来说个人推荐使用requests库 下面用实例来说明 urllib库: requests库: 实现同样功能: 实现同样的功能下urllib比request步骤更复杂,这个对于我们编程来说是 ...

  6. 2019年10月11号 王庆超 linux

    1.计算机操作系统简介 (1)掌握操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统 程序,它位于硬件和应用程序之间. (2)掌握操作系统的内核的定义:操作系统的内核是一个管 ...

  7. jquery判断手指滑动方向

    jquery判断手指滑动方向 <pre> /*判断哪个滑动方向还是自己改下 要么上下 要么左右*/ var startX; var startY; $(".shanghua&qu ...

  8. centos6的mysql安装

    1.安装mysql服务端 yum install mysql-server        yum install mysql-devel 2.下载mysql的压缩包 wget http://dev.m ...

  9. CMDB连接方式

    1.agent agent (放在每台客户端服务器上,定时任务) 脚本演示 # 采集本机的信息 执行命令 import subprocess v1 = subprocess.getoutput('ip ...

  10. TCP time_wait close_wait问题(可能是全网最清楚的例子)

    背景 公司群里,运维发现一个问题,task服务报错(如下) The stream or file \"/data/logs/adn_task/offer_service.log\" ...