Delphi - 지속적인 SuperDll 업데이트 작성
5년 동안 Delpher로서 Delphi를 데스크톱 응용의 왕이라고 생각했고 다른 Delpher들도 그렇게 생각했을 거라고 믿습니다.
그러나 천천히 나는 일반적인 방식인 델피 개발이 코드의 심각한 비대화를 초래할 수 있다는 것을 발견했다. 특히 MDI류의 대형 프로젝트, 여러 사람이 동시에 개발하는 상황에서.
예를 들어 Delphi가 자주 사용하는 업무 논리로 데이터는 Excel로 도출되고 공용 모듈로 되어 업무 단원에 놓을 수 있다. 서브창은 사용할 때 직접 호출하면 된다. 그러나 일반적인 상황에서 일은 상상만큼 간단하지 않다. 관리자의 생각은 정말 한마디로 말하기 어렵다.
나중에 저는 Delphi에서 자주 사용하는 업무 논리 기능을 DLL로 봉인할 생각이 생겼습니다. 모든 업무 논리는 DLL에서만 실현할 수 있고 시스템에서 업무 논리를 직접 쓸 수 없고 DLL만 호출할 수 있습니다.
이렇게 하면 같은 업무 기능이 중복 개발되지 않고 코드의 비대함을 크게 줄일 수 있으며 업무 논리 개발자와 프론트 데스크톱 개발자가 독립하여 개발 효율을 높일 수 있다.
이것이 바로 SuperDLL의 유래이며 추후 업데이트가 계속될 것입니다.
다음 코드를 참조하십시오.
로그를 업데이트하려면 다음과 같이 하십시오.
//초기화
//메일 발송
//FTP 업로드, 다운로드
//cxGrid 데이터 내보내기
1 library SuperDll;
2
3 { Important note about DLL memory management: ShareMem must be the
4 first unit in your library's USES clause AND your project's (select
5 Project-View Source) USES clause if your DLL exports any procedures or
6 functions that pass strings as parameters or function results. This
7 applies to all strings passed to and from your DLL--even those that
8 are nested in records and classes. ShareMem is the interface unit to
9 the BORLNDMM.DLL shared memory manager, which must be deployed along
10 with your DLL. To avoid using BORLNDMM.DLL, pass string information
11 using PChar or ShortString parameters. }
12
13 uses
14 SysUtils, Classes, Variants, Graphics, Controls, IdBaseComponent, IdComponent, IdFTP,
15 IdFTPCommon, IdTCPConnection, IdTCPClient, IdMessage, IdMessageClient, IdSMTP, cxGrid,
16 cxGridExportLink, ComObj,
17 cxCustomData, cxGraphics,
18 cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel,
19 cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
20 cxGridTableView, cxGridDBTableView;
21
22 {$R *.res}
23
24 function SuperDll_Init: Boolean; stdcall;
25 begin
26 Result := True;
27 end;
28
29 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
30 var
31 IdFtp: TIdFTP;
32 begin
33 IdFtp := TIdFTP.Create(nil);
34 Result := False;
35 try
36 with IdFtp do
37 begin
38 if Connected then Disconnect;
39 Username := vUserName;
40 Password := vPassWord;
41 Host := vHost;
42 Port := 21;
43 Connect;
44 ChangeDir(vDir);
45 TransferType := ftBinary;
46 if vType = 'Put' then
47 begin
48 Put(vSouFilePath, ExtractFileName(vSouFilePath));
49 end
50 else if vType = 'Get' then
51 begin
52 Get(ExtractFileName(vDesFilePath), vDesFilePath, True);
53 end;
54 end;
55 finally
56 IdFtp.Disconnect;
57 IdFtp.Free;
58 Result := True;
59 end;
60 end;
61
62 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;
63 var
64 IdSMTP: TIdSMTP;
65 IdMessage: TIdMessage;
66 begin
67 Result := False;
68 IdSMTP := TIdSMTP.Create(nil);
69 IdMessage := TIdMessage.Create(nil);
70 try
71 with IdMessage do
72 begin
73 Clear;
74 Subject := vSubject;
75 From.Text := vFrom;
76 Recipients.EMailAddresses := vRecipients;
77 CCList.EMailAddresses := vCCList;
78 BccList.EMailAddresses := vBccList;
79 Priority := TIdMessagePriority(4);
80 if Trim(vAttachment) <> '' then
81 begin
82 TIdAttachment.Create(MessageParts, Trim(vAttachment));
83 end;
84 vBody := vBody + #13#10;
85 vBody := vBody + #13#10;
86 vBody := vBody + #13#10;
87 vBody := vBody + #13#10;
88 vBody := vBody + 'It is Auto Mail System,please do not reply this mail directly,thank you!';
89 Body.Add(vBody);
90 end;
91
92 with IdSMTP do
93 begin
94 if Connected then Disconnect;
95 AuthenticationType := atLogin;
96 Port := 25;
97 UserName := vUsername;
98 Password := vPassword;
99 Host := vHost;
100 Connect;
101 end;
102
103 IdSMTP.Send(IdMessage);
104 IdSMTP.Disconnect;
105
106 Result := True;
107 finally
108 IdSMTP.Free;
109 IdMessage.Free;
110 end;
111 end;
112
113 function SaveCxGridToExcel(vCxGrid: TcxGrid; var vFullPathName: string): Boolean; stdcall;
114 begin
115 Result := False;
116 vCxGrid := TcxGrid.Create(nil);
117 ExportGridToExcel(vFullPathName, vCxGrid);
118 vCxGrid.Free;
119 Result := True;
120 end;
121
122 function SaveCxGridToCSV(vCxGrid: TcxGrid; var vFullPathName: string): Boolean; stdcall;
123 begin
124 Result := False;
125
126 ExportGridToText(vFullPathName + '.XLS', vCxGrid, True, True, ',', '', '', 'CSV');
127 Result := True; ;
128 end;
129
130 exports
131 SuperDll_Init,
132 SuperDll_Ftp_PutOrGet,
133 SuperDll_EMail_Send,
134 SaveCxGridToExcel,
135 SaveCxGridToCSV;
136
137 begin
138 end.
저자:Jeremy.Wu 출처:https://www.cnblogs.com/jeremywucnblog/본고의 판권은 작가와 블로그원에 공유되어 전재를 환영하지만 작가의 동의 없이 이 단락의 성명을 보류하고 문장 페이지의 뚜렷한 위치에서 원문의 연결을 해야 한다. 그렇지 않으면 법적 책임을 추궁할 권리를 보류한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.