调用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. MinIO 搭建

    MinIO 搭建 MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务.它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文 ...

  2. 关于路由器漏洞利用,qemu环境搭建,网络配置的总结

    FAT 搭建的坑 1 先按照官方步骤进行,完成后进行如下步骤 2 修改 move /firmadyne into /firmware-analysis-toolkit navigate to the ...

  3. windows使用docker运行mysql等工具(一)windows安装docker

    由于我本地的mysql版本比较低,最近想着要升级一下mysql版本,鉴于docker容器的火热,就想着在本地装个docker环境,然后下载最新版的mysql镜像,完成mysql8.0的安装.电脑是wi ...

  4. [转载]2.5 UiPath循环活动Do While的介绍和使用

    一.Do While的介绍 先执行循环体, 再判断条件是否满足, 如果满足, 则再次执行循环体, 直到判断条件不满足, 则跳出循环. 二.Do While在UiPath中的使用 1. 打开设计器,在设 ...

  5. Go 基础学习笔记(6)| 变量、函数使用

    Go 变量定义与使用: 1.var 声明 (1)var identifier type                              如:var x  int =10 (2) var id ...

  6. js数组方法大全(上)

    # js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...

  7. on duplicate key update 的使用(数据库有就修改,没有就添加数据)

    on duplicate key update 使用:当数据库中有该数据就修改,没有就添加 MySQL语句如下: # id 不存在则添加数据,id存在就更新数据 INSERT INTO t_user( ...

  8. mysql里面的时间获取(格式年月日)

    1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) ...

  9. idea2017建立jsp工程及tomcat等配置

    1:建立工程,选择Java Enterprise,可能需要选择tomcat路径和jdk路径: =============================== 以下作为第二种方式参考: 1:创建新工程 ...

  10. [第二章]了解storm

    1.什么是storm Apache Storm is a free and open source distributed realtime computation system. 免费.开源.分布式 ...