调用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. Pyinstaller打包scrapy

    环境 Windows7 Python3.65 scrapy1.74 PyInstaller3.5 创建打包脚本 在与scrapy.cfg同路径创建start.py # -*- coding: utf- ...

  2. Python基本数据结构之字典

    定义: {key1:value1,key2:value2} 1.键与值用冒号“:”分开: 2.项与项用逗号“,”分开: 示例: dic4={ 'name': 'xiaohu', 'age': 20, ...

  3. css3-3D特效

    2D页面即是在浏览器中开发的页面, 3D可以比喻浏览器为窗口,透过浏览器看到3D物体 一.设置3D场景 perspective:800[3D世界中的物体距3D场景的距离800px] perspecti ...

  4. XML解析之Jsoup

    操作xml文件 解析(读取):将文档中的数据解读到内存中 写入:将内存中的数据保存到XML文档中.持久化的存储 解析xml的方式 DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树 优点 ...

  5. sso单点登录系统

    sso单点登录概念 1.一处登录,处处登录.会单独做一个单点登录系统,只负责颁发token和验证token,和页面登录功能. 2.通过在浏览器cookie中放入token,和在redis中对应toke ...

  6. T-SQL Part V: Locks

    写SQL最常见的问题就是Dead Lock了.本篇简单介绍入门级别的Lock使用和排查. 首先来看MSDN上的官方文档(https://technet.microsoft.com/en-us/libr ...

  7. Resources for embedded SQL engine

    1. Official Website for SQLite: http://www.sqlite.org/ 2. .Net Wrapper for SQLite (System.Data.SQLit ...

  8. Cache地址映射

    原理:程序访问局部性         在较短时间内由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内         时间:在一小段时间内,最近被访问过的程序和数据很可能再次被访问       ...

  9. QQ是怎样创造出来的?——解密好友系统的设计

    本篇介绍笔者接触的第一个后台系统,从自身见闻出发,因此涉及的内容相对比较基础,后台大牛请自觉略过. 什么是好友系统? 简单的说,好友系统是维护用户好友关系的系统.我们最熟悉的好友系统案例当属QQ,实际 ...

  10. hdu 1083 Courses (最大匹配)

    CoursesTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...