OSDN Git Service

pluginに2ちゃんねる形式のdatを吐かせる関数を新設して、
[gikonavigoeson/gikonavi.git] / ExternalBoardManager.pas
1 unit ExternalBoardManager;
2
3 interface
4
5 uses
6         Windows, Classes, SysUtils,
7         IdHTTP, IdComponent, IdGlobal, IdException,
8         ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem;
9
10 type
11         // =========================================================================
12         // \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
13         // =========================================================================
14         TBoardPlugIn = class( TObject )
15         private
16                 FFilePath                                               : string;               // \83v\83\89\83O\83C\83\93\82ð\8e¦\82·\83p\83X
17                 FModule                                                 : HMODULE;      // \83v\83\89\83O\83C\83\93\82Ì\83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b
18
19                 FVersionInfo                            : TOnVersionInfo;
20                 FAcceptURL                                      : TOnAcceptURL;
21
22                 FCreateThreadItem               : TThreadItemCreate;
23                 FDisposeThreadItem      : TThreadItemDispose;
24                 FDownloadThread                 : TThreadItemOnDownload;
25                 FWriteThread                            : TThreadItemOnWrite;
26                 FGetRes                                                 : TThreadItemOnGetRes;
27         FGetDat                                                 : TThreadItemOnGetDat;
28                 FGetHeader                                      : TThreadItemOnGetHeader;
29                 FGetFooter                                      : TThreadItemOnGetFooter;
30                 FGetBoardURL                            : TThreadItemOnGetBoardURL;
31
32                 FCreateBoardItem                : TBoardItemCreate;
33                 FDisposeBoardItem               : TBoardItemDispose;
34                 FDownloadBoard                  : TBoardItemOnDownload;
35                 FCreateThread                           : TBoardItemOnCreateThread;
36                 FEnumThread                                     : TBoardItemOnEnumThread;
37                 FFileName2ThreadURL     : TBoardItemOnFileName2ThreadURL;
38
39         public
40                 // \83R\83\93\83X\83g\83\89\83N\83^
41                 constructor     Create;
42                 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
43                 constructor     CreateFromPath( inPath : string );
44                 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\8dì\90¬
45                 constructor     CreateFromName( inName : string );
46                 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
47                 constructor     CreateFromModule( inModule : HMODULE );
48                 // \83f\83X\83g\83\89\83N\83^
49                 destructor      Destroy; override;
50
51                 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
52                 procedure       LoadFromPath( inPath : string );
53                 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
54                 procedure       LoadFromName( inName : string );
55                 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
56                 procedure       LoadFromModule( inModule : HMODULE );
57
58                 //===== PlugInMain \8aÖ\98A
59                 // \83o\81[\83W\83\87\83\93\8fî\95ñ
60                 procedure       VersionInfo(    var outAgent : string;
61                         var outMajor : DWORD; var outMinor : DWORD;
62                         var outRelease : string; var outRevision : DWORD );
63                 // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
64                 function        AcceptURL( inURL : string ) : TAcceptType;
65
66                 //===== TThreadItem \8aÖ\98A
67                 // TThreadItem \82ª\90\90¬\82³\82ê\82½
68                 procedure       CreateThreadItem( threadItem : DWORD );
69                 // TThreadItem \82ª\94j\8aü\82³\82ê\82½
70                 procedure       DisposeThreadItem( threadItem : DWORD );
71                 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
72                 function        DownloadThread( threadItem : DWORD ) : TDownloadState;
73                 // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
74                 function        WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
75                 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
76                 function        GetRes( threadItem : DWORD; inNo : DWORD ) : string;
77                 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
78                 function        GetDat( threadItem : DWORD; inNo : DWORD ) : string;
79                 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
80                 function        GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
81                 // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
82                 function        GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
83                 // \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81
84                 function        GetBoardURL( threadItem : DWORD ) : string;
85
86                 //===== TBoardItem \8aÖ\98A
87                 // TBoard \82ª\90\90¬\82³\82ê\82½
88                 procedure       CreateBoardItem( boardItem : DWORD );
89                 // TBoardItem \82ª\94j\8aü\82³\82ê\82½
90                 procedure       DisposeBoardItem( boardItem : DWORD );
91                 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
92                 function        DownloadBoard( boardItem : DWORD ) : TDownloadState;
93                 // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
94                 function        CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
95                 // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
96                 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
97                 // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
98                 function        FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
99
100         private
101                 procedure       LoadPlugInAPI;
102
103         public
104                 property        FilePath        : string        read FFilePath;
105                 property        Module          : HMODULE       read FModule;
106         end;
107
108 var
109         OnWork                          : TWorkEvent;
110         OnWorkBegin             : TWorkBeginEvent;
111         OnWorkEnd                       : TWorkEndEvent;
112
113         BoardPlugIns    : array of TBoardPlugIn;
114
115 procedure InitializeBoardPlugIns;
116
117 implementation
118
119 uses GikoSystem;
120
121 // *************************************************************************
122 // BoardPlugin \83t\83H\83\8b\83_\82É\82 \82é\83v\83\89\83O\83C\83\93\82ð\91S\82Ä\83\8d\81[\83h
123 // *************************************************************************
124 procedure InitializeBoardPlugIns;
125 var
126         i, bound                : Integer;
127         pluginNames     : TStringList;
128 begin
129
130         pluginNames := TStringList.Create;
131         try
132                 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
133                 SetLength( BoardPlugIns, pluginNames.Count );
134
135                 bound := pluginNames.Count - 1;
136                 for i := 0 to bound do
137                         BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
138         finally
139                 pluginNames.Free;
140         end;
141
142 end;
143
144
145
146 // =========================================================================
147 // \83v\83\89\83O\83C\83\93\82ð\8aÇ\97\9d\82·\82é TBoardPlugin \83N\83\89\83X
148 // =========================================================================
149
150 // *************************************************************************
151 // \83R\83\93\83X\83g\83\89\83N\83^
152 // *************************************************************************
153 constructor     TBoardPlugIn.Create;
154 begin
155
156         inherited;
157
158         FVersionInfo                            := nil;
159         FAcceptURL                                      := nil;
160
161         FCreateThreadItem               := nil;
162         FDisposeThreadItem      := nil;
163         FDownloadThread                 := nil;
164         FWriteThread                            := nil;
165         FGetRes                                                 := nil;
166     FGetDat                                                     := nil;
167         FGetHeader                                      := nil;
168         FGetFooter                                      := nil;
169
170         FCreateBoardItem                := nil;
171         FDisposeBoardItem               := nil;
172         FDownloadBoard                  := nil;
173         FCreateThread                           := nil;
174         FEnumThread                                     := nil;
175         FFileName2ThreadURL     := nil;
176
177 end;
178
179 // *************************************************************************
180 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\8dì\90¬
181 // *************************************************************************
182 constructor     TBoardPlugIn.CreateFromPath(
183         inPath : string
184 );
185 begin
186
187         Create;
188
189         LoadFromPath( inPath );
190
191 end;
192
193 // *************************************************************************
194 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\8dì\90¬
195 // *************************************************************************
196 constructor     TBoardPlugIn.CreateFromName(
197         inName : string
198 );
199 begin
200
201         Create;
202
203         LoadFromName( inName );
204
205 end;
206
207 // *************************************************************************
208 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\8dì\90¬
209 // *************************************************************************
210 constructor     TBoardPlugIn.CreateFromModule(
211         inModule : HMODULE
212 );
213 begin
214
215         inherited Create;
216
217         LoadFromModule( inModule );
218
219 end;
220
221 // *************************************************************************
222 // \83f\83X\83g\83\89\83N\83^
223 // *************************************************************************
224 destructor      TBoardPlugIn.Destroy;
225 begin
226
227         FreeLibrary( FModule );
228
229         inherited;
230
231 end;
232
233 // *************************************************************************
234 // \83v\83\89\83O\83C\83\93\82Ì\83p\83X\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
235 // *************************************************************************
236 procedure TBoardPlugIn.LoadFromPath(
237         inPath : string
238 );
239 begin
240
241         FFilePath := inPath;
242         if FileExists( inPath ) then
243                 FModule := LoadLibrary( PChar( inPath ) )
244         else if FileExists( inPath + '.dll' ) then
245                 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
246
247         LoadPlugInAPI;
248
249 end;
250
251 // *************************************************************************
252 // \83v\83\89\83O\83C\83\93\96¼\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
253 // *************************************************************************
254 procedure TBoardPlugIn.LoadFromName(
255         inName : string
256 );
257 begin
258
259         LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
260
261 end;
262
263 // *************************************************************************
264 // \83\82\83W\83\85\81[\83\8b\83n\83\93\83h\83\8b\82ð\8ew\92è\82µ\82Ä\83\8d\81[\83h
265 // *************************************************************************
266 procedure TBoardPlugIn.LoadFromModule(
267         inModule        : HMODULE
268 );
269 var
270         tmp                             : array [0..MAX_PATH] of Char;
271 begin
272
273         GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
274         FFilePath       := tmp;
275         FModule         := inModule;
276
277         LoadPlugInAPI;
278
279 end;
280
281 // *************************************************************************
282 // \83o\81[\83W\83\87\83\93\8fî\95ñ
283 // *************************************************************************
284 procedure TBoardPlugIn.VersionInfo(
285         var outAgent            : string;               // \83o\81[\83W\83\87\83\93\82ð\88ê\90Ø\8aÜ\82Ü\82È\82¢\8f\83\90\88\82È\96¼\8fÌ
286         var outMajor            : DWORD;                // \83\81\83W\83\83\81[\83o\81[\83W\83\87\83\93
287         var outMinor            : DWORD;                // \83}\83C\83i\81[\83o\81[\83W\83\87\83\93
288         var outRelease  : string;               // \83\8a\83\8a\81[\83X\92i\8aK\96¼
289         var outRevision : DWORD                 // \83\8a\83r\83W\83\87\83\93\83i\83\93\83o\81[
290 );
291 var
292         agent                                           : PChar;
293         release                                 : PChar;
294 begin
295
296         if Assigned( FVersionInfo ) then begin
297                 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
298                 outAgent                := string( agent );
299                 outRelease      := string( release );
300                 DisposeResultString( agent );
301                 DisposeResultString( release );
302         end;
303
304 end;
305
306 // *************************************************************************
307 // \8ew\92è\82µ\82½ URL \82ð\82±\82Ì\83v\83\89\83O\83C\83\93\82Å\8eó\82¯\95t\82¯\82é\82©\82Ç\82¤\82©
308 // *************************************************************************
309 function        TBoardPlugIn.AcceptURL(
310         inURL : string
311 ) : TAcceptType;
312 begin
313
314         if Assigned( FAcceptURL ) then
315                 Result := FAcceptURL( PChar( inURL ) )
316         else
317                 Result := atNoAccept;
318
319 end;
320
321 // *************************************************************************
322 // TThreadItem \82ª\90\90¬\82³\82ê\82½
323 // *************************************************************************
324 procedure       TBoardPlugIn.CreateThreadItem(
325         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
326 );
327 begin
328
329         if Assigned( FCreateThreadItem ) then
330                 FCreateThreadItem( threadItem );
331
332 end;
333
334 // *************************************************************************
335 // TThreadItem \82ª\94j\8aü\82³\82ê\82½
336 // *************************************************************************
337 procedure       TBoardPlugIn.DisposeThreadItem(
338         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
339 );
340 begin
341
342         if Assigned( FDisposeThreadItem ) then
343                 FDisposeThreadItem( threadItem );
344
345 end;
346
347 // *************************************************************************
348 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
349 // *************************************************************************
350 function        TBoardPlugIn.DownloadThread(
351         threadItem : DWORD      // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
352 ) : TDownloadState;
353 begin
354
355         if Assigned( FDownloadThread ) then
356                 Result := FDownloadThread( threadItem )
357         else
358                 Result := dsError;
359
360 end;
361
362 // *************************************************************************
363 // \8f\91\82«\8d\9e\82Ý\82ð\8ew\8e¦
364 // *************************************************************************
365 function        TBoardPlugIn.WriteThread(
366         threadItem      : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
367         inName                  : string;       // \96¼\91O(\83n\83\93\83h\83\8b)
368         inMail                  : string;       // \83\81\81[\83\8b\83A\83h\83\8c\83X
369         inMessage               : string        // \96{\95
370 ) : TDownloadState;                     // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
371 begin
372
373         if Assigned( FWriteThread ) then
374                 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
375         else
376                 Result := dsError;
377
378 end;
379
380 // *************************************************************************
381 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é html \82ð\97v\8b\81
382 // *************************************************************************
383 function TBoardPlugIn.GetRes(
384         threadItem      : DWORD;                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
385         inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
386 ) : string;                                                     // \95\\8e¦\82·\82é HTML
387 var
388         tmp                                     : PChar;
389 begin
390
391         if Assigned( FGetRes ) then begin
392                 tmp                     := FGetRes( threadItem, inNo );
393                 try
394                         Result  := string( tmp );
395                 finally
396                         DisposeResultString( tmp );
397                 end;
398         end;
399
400 end;
401
402 // *************************************************************************
403 // \83\8c\83X\94Ô\8d\86 n \82É\91Î\82·\82é Dat \82ð\97v\8b\81
404 // *************************************************************************
405 function TBoardPlugIn.GetDat(
406         threadItem      : DWORD;                // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
407         inNo                            : DWORD                 // \95\\8e¦\82·\82é\83\8c\83X\94Ô\8d\86
408 ) : string;                                                     // \82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\8c`\8e®
409 begin
410
411         if Assigned( FGetDat ) then begin
412                 Result                  := FGetDat( threadItem, inNo );
413         end;
414
415 end;
416
417 // *************************************************************************
418 // \83X\83\8c\83b\83h\82Ì\83w\83b\83_ html \82ð\97v\8b\81
419 // *************************************************************************
420 function TBoardPlugIn.GetHeader(
421         threadItem                              : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
422         inOptionalHeader        : string        // \92Ç\89Á\82Ì\83w\83b\83_
423 ) : string;                                                                             // \90®\8c`\82³\82ê\82½ HTML
424 var
425         tmp                                                             : PChar;
426 begin
427
428         if Assigned( FGetHeader ) then begin
429                 tmp                     := FGetHeader( threadItem, PChar( inOptionalHeader ) );
430                 try
431                         Result  := string( tmp );
432                 finally
433                         DisposeResultString( tmp );
434                 end;
435         end;
436
437 end;
438
439 // *************************************************************************
440 // \83X\83\8c\83b\83h\82Ì\83t\83b\83^ html \82ð\97v\8b\81
441 // *************************************************************************
442 function TBoardPlugIn.GetFooter(
443         threadItem                              : DWORD;        // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
444         inOptionalFooter        : string        // \92Ç\89Á\82Ì\83t\83b\83^
445 ) : string;                                                                             // \90®\8c`\82³\82ê\82½ HTML
446 var
447         tmp                                                             : PChar;
448 begin
449
450         if Assigned( FGetFooter ) then begin
451                 tmp                     := FGetFooter( threadItem, PChar( inOptionalFooter ) );
452                 Result  := string( tmp );
453                 DisposeResultString( tmp );
454         end;
455
456 end;
457
458 // *************************************************************************
459 // \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81
460 // *************************************************************************
461 function        TBoardPlugIn.GetBoardURL(
462         threadItem      : DWORD // ThreadItem \82Ì\83C\83\93\83X\83^\83\93\83X
463 ) : string;
464 var
465         tmp                                     : PChar;
466 begin
467
468         if Assigned( FGetBoardURL ) then begin
469                 tmp                     := FGetBoardURL( threadItem );
470                 Result  := string( tmp );
471                 DisposeResultString( tmp );
472         end;
473
474 end;
475
476 // *************************************************************************
477 // TBoardItem \82ª\90\90¬\82³\82ê\82½
478 // *************************************************************************
479 procedure       TBoardPlugIn.CreateBoardItem(
480         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
481 );
482 begin
483
484         if Assigned( FCreateBoardItem ) then
485                 FCreateBoardItem( boardItem );
486
487 end;
488
489 // *************************************************************************
490 // TBoardItem \82ª\94j\8aü\82³\82ê\82½
491 // *************************************************************************
492 procedure       TBoardPlugIn.DisposeBoardItem(
493         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
494 );
495 begin
496
497         if Assigned( FDisposeBoardItem ) then
498                 FDisposeBoardItem( boardItem );
499
500 end;
501
502 // *************************************************************************
503 // \83_\83E\83\93\83\8d\81[\83h\82ð\8ew\8e¦
504 // *************************************************************************
505 function        TBoardPlugIn.DownloadBoard(
506         boardItem : DWORD       // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
507 ) : TDownloadState;
508 begin
509
510         if Assigned( FDownloadBoard ) then
511                 Result := FDownloadBoard( boardItem )
512         else
513                 Result := dsError;
514
515 end;
516
517 // *************************************************************************
518 // \83X\83\8c\97§\82Ä\82ð\8ew\8e¦
519 // *************************************************************************
520 function        TBoardPlugIn.CreateThread(
521         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
522         inSubject               : string;       // \83X\83\8c\83^\83C
523         inName                  : string;       // \96¼\91O(\83n\83\93\83h\83\8b)
524         inMail                  : string;       // \83\81\81[\83\8b\83A\83h\83\8c\83X
525         inMessage               : string        // \96{\95
526 ) : TDownloadState;                     // \8f\91\82«\8d\9e\82Ý\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©
527 begin
528
529         if Assigned( FCreateThread ) then
530                 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
531         else
532                 Result := dsError;
533
534 end;
535
536 // *************************************************************************
537 // \82±\82Ì\94Â\82É\95Û\97L\82µ\82Ä\82¢\82é\83X\83\8c\82ð\97ñ\8b\93
538 // *************************************************************************
539 procedure TBoardPlugIn.EnumThread(
540         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
541         inCallBack      : TBoardItemEnumThreadCallBack
542 );
543 begin
544
545         if Assigned( FEnumThread ) then
546                 FEnumThread( boardItem, inCallBack );
547
548 end;
549
550 // *************************************************************************
551 // \83t\83@\83C\83\8b\96¼\82©\82ç\83X\83\8c\83b\83h\82Ì URL \82ð\97v\8b\81
552 // *************************************************************************
553 function        TBoardPlugIn.FileName2ThreadURL(
554         boardItem               : DWORD;        // BoardItem \82Ì\83C\83\93\83X\83^\83\93\83X
555         inFileName      : string
556 ) : string;
557 var
558         tmp                                                             : PChar;
559 begin
560
561         if Assigned( FFileName2ThreadURL ) then begin
562                 tmp                     := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
563                 Result  := string( tmp );
564                 DisposeResultString( tmp );
565         end;
566
567 end;
568
569 // *************************************************************************
570 // \83v\83\89\83O\83C\83\93\82Ì API \82ð\8eæ\93¾
571 // *************************************************************************
572 procedure TBoardPlugIn.LoadPlugInAPI;
573 begin
574
575         try
576                 if Assigned( Pointer( FModule ) ) then begin
577                         FVersionInfo                            := GetProcAddress( FModule, 'OnVersionInfo' );
578                         FAcceptURL                                      := GetProcAddress( FModule, 'OnAcceptURL' );
579
580                         FCreateThreadItem               := GetProcAddress( FModule, 'ThreadItemCreate' );
581                         FDisposeThreadItem      := GetProcAddress( FModule, 'ThreadItemDispose' );
582                         FDownloadThread                 := GetProcAddress( FModule, 'ThreadItemOnDownload' );
583                         FWriteThread                            := GetProcAddress( FModule, 'ThreadItemOnWrite' );
584                         FGetRes                                                 := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
585             FGetDat                                                     := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
586                         FGetHeader                                      := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
587                         FGetFooter                                      := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
588                         FGetBoardURL                            := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
589
590                         FCreateBoardItem                := GetProcAddress( FModule, 'BoardItemCreate' );
591                         FDisposeBoardItem               := GetProcAddress( FModule, 'BoardItemDispose' );
592                         FDownloadBoard                  := GetProcAddress( FModule, 'BoardItemOnDownload' );
593                         FCreateThread                           := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
594                         FEnumThread                                     := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
595                         FFileName2ThreadURL     := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );
596                 end;
597         except
598         end;
599
600 end;
601
602 end.
603