1 unit ExternalBoardManager;
6 Windows, Classes, SysUtils,
7 IdHTTP, IdComponent, IdGlobal, IdException,
8 ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem;
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 )
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
20 FVersionInfo : TOnVersionInfo;
21 FAcceptURL : TOnAcceptURL;
22 FPlugInMenu : TOnPlugInMenu;
24 FCreateThreadItem : TThreadItemCreate;
25 FDisposeThreadItem : TThreadItemDispose;
26 FDownloadThread : TThreadItemOnDownload;
27 FWriteThread : TThreadItemOnWrite;
28 FGetRes : TThreadItemOnGetRes;
29 FGetDat : TThreadItemOnGetDat;
30 FGetHeader : TThreadItemOnGetHeader;
31 FGetFooter : TThreadItemOnGetFooter;
32 FGetBoardURL : TThreadItemOnGetBoardURL;
34 FCreateBoardItem : TBoardItemCreate;
35 FDisposeBoardItem : TBoardItemDispose;
36 FDownloadBoard : TBoardItemOnDownload;
37 FCreateThread : TBoardItemOnCreateThread;
38 FEnumThread : TBoardItemOnEnumThread;
39 FFileName2ThreadURL : TBoardItemOnFileName2ThreadURL;
42 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
44 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
45 constructor CreateFromPath( inPath : string );
46 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
47 constructor CreateFromName( inName : string );
48 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
49 constructor CreateFromModule( inModule : HMODULE );
50 //
\83f
\83X
\83g
\83\89\83N
\83^
51 destructor Destroy; override;
53 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
54 procedure LoadFromPath( inPath : string );
55 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
56 procedure LoadFromName( inName : string );
57 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
58 procedure LoadFromModule( inModule : HMODULE );
60 //===== PlugInMain
\8aÖ
\98A
61 //
\83v
\83\89\83O
\83C
\83\93\82ª(
\90³
\82µ
\82)
\83\8d\81[
\83h
\82³
\82ê
\82½
63 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
64 procedure VersionInfo( var outAgent : string;
65 var outMajor : DWORD; var outMinor : DWORD;
66 var outRelease : string; var outRevision : DWORD );
67 //
\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©
68 function AcceptURL( inURL : string ) : TAcceptType;
69 //
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\89
70 procedure PlugInMenu( inHandle : HMENU );
72 //===== TThreadItem
\8aÖ
\98A
73 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
74 procedure CreateThreadItem( threadItem : DWORD );
75 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
76 procedure DisposeThreadItem( threadItem : DWORD );
77 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
78 function DownloadThread( threadItem : DWORD ) : TDownloadState;
79 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
80 function WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
81 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
82 function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
83 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é Dat
\82ð
\97v
\8b\81
84 function GetDat( threadItem : DWORD; inNo : DWORD ) : string;
85 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
86 function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
87 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
88 function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
89 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
90 function GetBoardURL( threadItem : DWORD ) : string;
92 //===== TBoardItem
\8aÖ
\98A
93 // TBoard
\82ª
\90¶
\90¬
\82³
\82ê
\82½
94 procedure CreateBoardItem( boardItem : DWORD );
95 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
96 procedure DisposeBoardItem( boardItem : DWORD );
97 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
98 function DownloadBoard( boardItem : DWORD ) : TDownloadState;
99 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
100 function CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
101 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
102 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
103 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
104 function FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
107 procedure LoadPlugInAPI;
110 property FilePath : string read FFilePath;
111 property Module : HMODULE read FModule;
116 OnWorkBegin : TWorkBeginEvent;
117 OnWorkEnd : TWorkEndEvent;
119 BoardPlugIns : array of TBoardPlugIn;
121 procedure InitializeBoardPlugIns;
127 // *************************************************************************
128 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
129 // *************************************************************************
130 procedure InitializeBoardPlugIns;
133 pluginNames : TStringList;
136 pluginNames := TStringList.Create;
138 //GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
139 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False );
140 SetLength( BoardPlugIns, pluginNames.Count );
142 bound := pluginNames.Count - 1;
143 for i := 0 to bound do begin
145 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
146 BoardPlugIns[ i ].Loaded;
157 // =========================================================================
158 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
159 // =========================================================================
161 // *************************************************************************
162 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
163 // *************************************************************************
164 constructor TBoardPlugIn.Create;
174 FCreateThreadItem := nil;
175 FDisposeThreadItem := nil;
176 FDownloadThread := nil;
183 FCreateBoardItem := nil;
184 FDisposeBoardItem := nil;
185 FDownloadBoard := nil;
186 FCreateThread := nil;
188 FFileName2ThreadURL := nil;
192 // *************************************************************************
193 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
194 // *************************************************************************
195 constructor TBoardPlugIn.CreateFromPath(
202 LoadFromPath( inPath );
206 // *************************************************************************
207 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
208 // *************************************************************************
209 constructor TBoardPlugIn.CreateFromName(
216 LoadFromName( inName );
220 // *************************************************************************
221 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
222 // *************************************************************************
223 constructor TBoardPlugIn.CreateFromModule(
230 LoadFromModule( inModule );
234 // *************************************************************************
235 //
\83f
\83X
\83g
\83\89\83N
\83^
236 // *************************************************************************
237 destructor TBoardPlugIn.Destroy;
240 FreeLibrary( FModule );
246 // *************************************************************************
247 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
248 // *************************************************************************
249 procedure TBoardPlugIn.LoadFromPath(
255 if FileExists( inPath ) then
256 FModule := LoadLibrary( PChar( inPath ) )
257 else if FileExists( inPath + '.dll' ) then
258 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
264 // *************************************************************************
265 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
266 // *************************************************************************
267 procedure TBoardPlugIn.LoadFromName(
272 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
276 // *************************************************************************
277 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
278 // *************************************************************************
279 procedure TBoardPlugIn.LoadFromModule(
283 tmp : array [0..MAX_PATH] of Char;
286 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
294 // *************************************************************************
295 //
\83v
\83\89\83O
\83C
\83\93\82ª(
\90³
\82µ
\82)
\83\8d\81[
\83h
\82³
\82ê
\82½
296 // *************************************************************************
297 procedure TBoardPlugIn.Loaded;
300 if Assigned( FLoad ) then
301 FLoad( DWORD( Self ) );
305 // *************************************************************************
306 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
307 // *************************************************************************
308 procedure TBoardPlugIn.VersionInfo(
309 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
310 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
311 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
312 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
313 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
320 if Assigned( FVersionInfo ) then begin
321 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
322 outAgent := string( agent );
323 outRelease := string( release );
324 DisposeResultString( agent );
325 DisposeResultString( release );
330 // *************************************************************************
331 //
\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©
332 // *************************************************************************
333 function TBoardPlugIn.AcceptURL(
338 if Assigned( FAcceptURL ) then
339 Result := FAcceptURL( PChar( inURL ) )
341 Result := atNoAccept;
345 // *************************************************************************
346 //
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\89
347 // *************************************************************************
348 procedure TBoardPlugIn.PlugInMenu(
349 inHandle : HMENU //
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\8b
353 if Assigned( FPlugInMenu ) then
354 FPlugInMenu( inHandle );
358 // *************************************************************************
359 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
360 // *************************************************************************
361 procedure TBoardPlugIn.CreateThreadItem(
362 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
366 if Assigned( FCreateThreadItem ) then
367 FCreateThreadItem( threadItem );
371 // *************************************************************************
372 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
373 // *************************************************************************
374 procedure TBoardPlugIn.DisposeThreadItem(
375 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
379 if Assigned( FDisposeThreadItem ) then
380 FDisposeThreadItem( threadItem );
384 // *************************************************************************
385 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
386 // *************************************************************************
387 function TBoardPlugIn.DownloadThread(
388 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
392 if Assigned( FDownloadThread ) then
393 Result := FDownloadThread( threadItem )
399 // *************************************************************************
400 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
401 // *************************************************************************
402 function TBoardPlugIn.WriteThread(
403 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
404 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
405 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
406 inMessage : string //
\96{
\95¶
407 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
410 if Assigned( FWriteThread ) then
411 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
417 // *************************************************************************
418 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
419 // *************************************************************************
420 function TBoardPlugIn.GetRes(
421 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
422 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
423 ) : string; //
\95\
\8e¦
\82·
\82é HTML
428 if Assigned( FGetRes ) then begin
429 tmp := FGetRes( threadItem, inNo );
431 Result := string( tmp );
433 DisposeResultString( tmp );
439 // *************************************************************************
440 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é Dat
\82ð
\97v
\8b\81
441 // *************************************************************************
442 function TBoardPlugIn.GetDat(
443 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
444 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
445 ) : string; //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ìdat
\8c`
\8e®
450 if Assigned( FGetDat ) then begin
451 tmp := FGetDat( threadItem, inNo );
453 Result := string( tmp );
455 DisposeResultString(tmp); end;
460 // *************************************************************************
461 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
462 // *************************************************************************
463 function TBoardPlugIn.GetHeader(
464 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
465 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
466 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
471 if Assigned( FGetHeader ) then begin
472 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
474 Result := string( tmp );
476 DisposeResultString( tmp );
482 // *************************************************************************
483 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
484 // *************************************************************************
485 function TBoardPlugIn.GetFooter(
486 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
487 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
488 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
493 if Assigned( FGetFooter ) then begin
494 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
495 Result := string( tmp );
496 DisposeResultString( tmp );
501 // *************************************************************************
502 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
503 // *************************************************************************
504 function TBoardPlugIn.GetBoardURL(
505 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
511 if Assigned( FGetBoardURL ) then begin
512 tmp := FGetBoardURL( threadItem );
513 Result := string( tmp );
514 DisposeResultString( tmp );
519 // *************************************************************************
520 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
521 // *************************************************************************
522 procedure TBoardPlugIn.CreateBoardItem(
523 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
527 if Assigned( FCreateBoardItem ) then
528 FCreateBoardItem( boardItem );
532 // *************************************************************************
533 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
534 // *************************************************************************
535 procedure TBoardPlugIn.DisposeBoardItem(
536 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
540 if Assigned( FDisposeBoardItem ) then
541 FDisposeBoardItem( boardItem );
545 // *************************************************************************
546 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
547 // *************************************************************************
548 function TBoardPlugIn.DownloadBoard(
549 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
553 if Assigned( FDownloadBoard ) then
554 Result := FDownloadBoard( boardItem )
560 // *************************************************************************
561 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
562 // *************************************************************************
563 function TBoardPlugIn.CreateThread(
564 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
565 inSubject : string; //
\83X
\83\8c\83^
\83C
566 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
567 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
568 inMessage : string //
\96{
\95¶
569 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
572 if Assigned( FCreateThread ) then
573 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
579 // *************************************************************************
580 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
581 // *************************************************************************
582 procedure TBoardPlugIn.EnumThread(
583 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
584 inCallBack : TBoardItemEnumThreadCallBack
588 if Assigned( FEnumThread ) then
589 FEnumThread( boardItem, inCallBack );
593 // *************************************************************************
594 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
595 // *************************************************************************
596 function TBoardPlugIn.FileName2ThreadURL(
597 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
604 if Assigned( FFileName2ThreadURL ) then begin
605 tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
606 Result := string( tmp );
607 DisposeResultString( tmp );
612 // *************************************************************************
613 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
614 // *************************************************************************
615 procedure TBoardPlugIn.LoadPlugInAPI;
619 if Assigned( Pointer( FModule ) ) then begin
620 FLoad := GetProcAddress( FModule, 'OnLoad' );
621 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
622 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
623 FPlugInMenu := GetProcAddress( FModule, 'OnPlugInMenu' );
625 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
626 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
627 FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
628 FWriteThread := GetProcAddress( FModule, 'ThreadItemOnWrite' );
629 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
630 FGetDat := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
631 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
632 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
633 FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
635 FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' );
636 FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' );
637 FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' );
638 FCreateThread := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
639 FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
640 FFileName2ThreadURL := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );