Delphi - 调用SuperDll 持续更新
调用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 持续更新的更多相关文章
- Delphi - 创建SuperDll 持续更新
Delphi SuperDll 作为一名5年的Delpher,一直认为Delphi是桌面应用的王者,我相信其他的Delpher也这么认为. 但是,慢慢的我发现普通方式的Delphi开发会造成代码的严重 ...
- React Native之坑总结(持续更新)
React Native之坑总结(持续更新) Genymotion安装与启动 之前我用的是蓝叠(BlueStack)模拟器,跑RN程序也遇到了一些问题,都通过搜索引擎解决了,不过没有记录. 但是Blu ...
- 干货!IT小伙伴们实用的网站及工具大集合!持续更新!
1.Git 还在担心自己辛辛苦苦写的代码被误删了吗?还在担心自己改错了代码不能挽回吗?还在苦恼于多人开发合作找不到一个好的工具吗?那么用Git就对 了,Git是一个开源的分布式版本控制系统,用以有效. ...
- ( 译、持续更新 ) JavaScript 上分小技巧(四)
后续如有内容,本篇将会照常更新并排满15个知识点,以下是其他几篇译文的地址: 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第二篇地址:( 译.持续更新 ) JavaScr ...
- ( 译、持续更新 ) JavaScript 上分小技巧(三)
最近家里杂事较多,自学时间实在少的可怜,所以都在空闲时间看看老外写的内容,学习之外顺便翻译分享~等学习的时间充足些再写写自己的一些学习内容和知识点分析(最近有在接触的:复习(C#,SQL).(学习)T ...
- ( 译、持续更新 ) JavaScript 上分小技巧(二)
考虑到文章过长,不便于阅读,这里分出第二篇,如有后续,每15个知识点分为一篇... 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第三篇地址:( 译.持续更新 ) Java ...
- ( 译、持续更新 ) JavaScript 上分小技巧(一)
感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...
- Android系统兼容性问题(持续更新)
相信开发过一段Android的都被Android中的兼容性问题给折腾过,有时这确实很无奈,Android被不同的厂商改的七零八落的.本文主要总结下本人在实际的项目开发过程中所遇到的兼容性问题,以及最后 ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
随机推荐
- Kong01-Kong 介绍
概述 Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能. Kong 的官方网站,https://konghq.com/kong Kong 的官方 Github 站点:ht ...
- Pandas常用基本功能
Series 和 DataFrame还未构建完成的朋友可以参考我的上一篇博文:https://www.cnblogs.com/zry-yt/p/11794941.html 当我们构建好了 Series ...
- jieba分词基础知识
安装:pip install jieba 导包:import jieba 精确模式:试图将句子最精确地切开,适合文本分析(很像人类一样去分词) jieba.cut(字符串) --> 返回生成器 ...
- 原生JS实现单向链表
1.前言 用JS实现一个简单的单向链表,并完成相关的功能 2.功能说明 push(value):从链表尾部添加一个新的节点 insertAfer(value,item):向链表中的item节点之后插入 ...
- Kubernetes3-kubectl管理Kubernetes容器平台-1
一.简介 1.什么是kubectl kubectl前面其实已经用到了一些,它其实就是用于操作kubernetes集群的命令行接口,通过kubectl的各种命令实现各种功能 2.环境还是用上一偏文章 K ...
- php Yaf_Loader::import引入文件报错的解决方法
php Yaf_Loader::import引入文件报错的解决方法 改下配置文件就行<pre>yaf.use_spl_autoload=1</pre> 也可以PHP动态修改 毕 ...
- Linux跨网段通信小实验
一.实验场景. 实验准备,Linux主机4台.分别是主机A,路由主机R1,路由主机R2,主机 C,主机A的ip是192.168.56.66/24,且只有一块网卡eth0:路由主机R1有两块网卡eth0 ...
- 一个excel(20M)就能干趴你的poi,你信吗?
自从上一篇:一个普通类就能干趴你的springboot,你信吗?后,很巧的是这次又发现一个问题,所以有了这篇文章,还是想沿用上篇的”流水帐“的方式查找问题和解决问题.这篇文章主要是因为使用POI导入一 ...
- Mysql备份还有这么多套路,还不了解下?
逻辑备份和物理备份 逻辑备份 逻辑备份用于备份数据库的结构(CREAET DATABASE.CREATE TABLE)和数据(INSERT),这种备份类型适合数据量小.跨SQL服务器.需要修改数据等场 ...
- 编写 Dockerfile 最佳实践
官方仓库虽然有数十万计的免费镜像,但大多数无法直接满足公司业务需求,这就需要我们自己去定制镜像了. Docker通过Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文 ...