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++开发为主,难免与其他 ...
随机推荐
- 基于node的前端项目代码包发布至nexus
目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...
- spring session源码解析
模块划分 core部分代码 存储实现部分部分: jdbc实现 具体存储的实现类 例如:org.springframework.session.jdbc.JdbcOperationsSessionRep ...
- 用Java实现简单的区块链
用 Java 实现简单的区块链 1. 概述 本文中,我们将学习区块链技术的基本概念.也将根据概念使用 Java 来实现一个基本的应用程序. 进一步,我们将讨论一些先进的概念以及该技术的实际应用. 2. ...
- ARM7中断的理解
谈谈对中断的理解? 中断是计算机中处理异步事件的重要机制 中断触发的方式: 1)中断源级设置 按键:(CPU之外的硬件) 设置中 ...
- canvas绘制工作流之绘制节点
上一篇我们介绍了canvas绘制工作流的大概步骤,接下来会有系列文章细致的介绍怎么用canvas绘制工作流:这篇文章主要介绍用canvas绘制流程节点. 绘制前我们需要先准备一张节点图片,例如::好了 ...
- Netty处理器重要概念
1.Netty的处理器可以分为两类:入站处理器和出战处理器 2.入站处理器顶层是ChannelInboundHandler,出战处理器顶层是ChannelOutboundHandler 3.数据处理时 ...
- js控制文本显示的字数,超出显示省略号
在css中我们说了用css控制文本显示几行,超出用省略号,但这个办法是要完全占满一整行的,偏偏就是有UI设计师就不这么干,是不是很想打他,哈哈哈,我不会的时候都这样子在心里骂设计师的,这么久那么爱搞特 ...
- [javascript] 编写一个计算器,实现加减法
1.代码 <script> function sum(){ //加法 var value1 = document.getElementById("num1").valu ...
- 微擎框架商业版 V2.1.2 去后门一键安装版+去除云平台+无附带模块
下载地址:http://dd.ma/AdVvoDu5 关注微信公众号codervip,点击公众号菜单,获取提取码! 这个是一键安装版本,所以微擎安装比较简单,不用大家手动去改数据库了,而且修复上个2. ...
- 有关html的标签以及css属性(border、div)
border 边框css属性 边框颜色 border-color边框样式 border-style:solid (实线)dashed(虚线)默认为none边框粗细 border-width:1px:默 ...