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 SetLength( BoardPlugIns, pluginNames.Count );
141 bound := pluginNames.Count - 1;
142 for i := 0 to bound do begin
144 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
145 BoardPlugIns[ i ].Loaded;
156 // =========================================================================
157 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
158 // =========================================================================
160 // *************************************************************************
161 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
162 // *************************************************************************
163 constructor TBoardPlugIn.Create;
173 FCreateThreadItem := nil;
174 FDisposeThreadItem := nil;
175 FDownloadThread := nil;
182 FCreateBoardItem := nil;
183 FDisposeBoardItem := nil;
184 FDownloadBoard := nil;
185 FCreateThread := nil;
187 FFileName2ThreadURL := nil;
191 // *************************************************************************
192 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
193 // *************************************************************************
194 constructor TBoardPlugIn.CreateFromPath(
201 LoadFromPath( inPath );
205 // *************************************************************************
206 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
207 // *************************************************************************
208 constructor TBoardPlugIn.CreateFromName(
215 LoadFromName( inName );
219 // *************************************************************************
220 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
221 // *************************************************************************
222 constructor TBoardPlugIn.CreateFromModule(
229 LoadFromModule( inModule );
233 // *************************************************************************
234 //
\83f
\83X
\83g
\83\89\83N
\83^
235 // *************************************************************************
236 destructor TBoardPlugIn.Destroy;
239 FreeLibrary( FModule );
245 // *************************************************************************
246 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
247 // *************************************************************************
248 procedure TBoardPlugIn.LoadFromPath(
254 if FileExists( inPath ) then
255 FModule := LoadLibrary( PChar( inPath ) )
256 else if FileExists( inPath + '.dll' ) then
257 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
263 // *************************************************************************
264 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
265 // *************************************************************************
266 procedure TBoardPlugIn.LoadFromName(
271 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
275 // *************************************************************************
276 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
277 // *************************************************************************
278 procedure TBoardPlugIn.LoadFromModule(
282 tmp : array [0..MAX_PATH] of Char;
285 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
293 // *************************************************************************
294 //
\83v
\83\89\83O
\83C
\83\93\82ª(
\90³
\82µ
\82)
\83\8d\81[
\83h
\82³
\82ê
\82½
295 // *************************************************************************
296 procedure TBoardPlugIn.Loaded;
299 if Assigned( FLoad ) then
300 FLoad( DWORD( Self ) );
304 // *************************************************************************
305 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
306 // *************************************************************************
307 procedure TBoardPlugIn.VersionInfo(
308 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
309 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
310 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
311 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
312 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
319 if Assigned( FVersionInfo ) then begin
320 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
321 outAgent := string( agent );
322 outRelease := string( release );
323 DisposeResultString( agent );
324 DisposeResultString( release );
329 // *************************************************************************
330 //
\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©
331 // *************************************************************************
332 function TBoardPlugIn.AcceptURL(
337 if Assigned( FAcceptURL ) then
338 Result := FAcceptURL( PChar( inURL ) )
340 Result := atNoAccept;
344 // *************************************************************************
345 //
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\89
346 // *************************************************************************
347 procedure TBoardPlugIn.PlugInMenu(
348 inHandle : HMENU //
\83\81\83j
\83\85\81[
\83n
\83\93\83h
\83\8b
352 if Assigned( FPlugInMenu ) then
353 FPlugInMenu( inHandle );
357 // *************************************************************************
358 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
359 // *************************************************************************
360 procedure TBoardPlugIn.CreateThreadItem(
361 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
365 if Assigned( FCreateThreadItem ) then
366 FCreateThreadItem( threadItem );
370 // *************************************************************************
371 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
372 // *************************************************************************
373 procedure TBoardPlugIn.DisposeThreadItem(
374 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
378 if Assigned( FDisposeThreadItem ) then
379 FDisposeThreadItem( threadItem );
383 // *************************************************************************
384 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
385 // *************************************************************************
386 function TBoardPlugIn.DownloadThread(
387 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
391 if Assigned( FDownloadThread ) then
392 Result := FDownloadThread( threadItem )
398 // *************************************************************************
399 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
400 // *************************************************************************
401 function TBoardPlugIn.WriteThread(
402 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
403 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
404 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
405 inMessage : string //
\96{
\95¶
406 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
409 if Assigned( FWriteThread ) then
410 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
416 // *************************************************************************
417 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
418 // *************************************************************************
419 function TBoardPlugIn.GetRes(
420 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
421 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
422 ) : string; //
\95\
\8e¦
\82·
\82é HTML
427 if Assigned( FGetRes ) then begin
428 tmp := FGetRes( threadItem, inNo );
430 Result := string( tmp );
432 DisposeResultString( tmp );
438 // *************************************************************************
439 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é Dat
\82ð
\97v
\8b\81
440 // *************************************************************************
441 function TBoardPlugIn.GetDat(
442 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
443 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
444 ) : string; //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ìdat
\8c`
\8e®
447 if Assigned( FGetDat ) then begin
448 Result := FGetDat( threadItem, inNo );
453 // *************************************************************************
454 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
455 // *************************************************************************
456 function TBoardPlugIn.GetHeader(
457 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
458 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
459 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
464 if Assigned( FGetHeader ) then begin
465 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
467 Result := string( tmp );
469 DisposeResultString( tmp );
475 // *************************************************************************
476 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
477 // *************************************************************************
478 function TBoardPlugIn.GetFooter(
479 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
480 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
481 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
486 if Assigned( FGetFooter ) then begin
487 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
488 Result := string( tmp );
489 DisposeResultString( tmp );
494 // *************************************************************************
495 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
496 // *************************************************************************
497 function TBoardPlugIn.GetBoardURL(
498 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
504 if Assigned( FGetBoardURL ) then begin
505 tmp := FGetBoardURL( threadItem );
506 Result := string( tmp );
507 DisposeResultString( tmp );
512 // *************************************************************************
513 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
514 // *************************************************************************
515 procedure TBoardPlugIn.CreateBoardItem(
516 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
520 if Assigned( FCreateBoardItem ) then
521 FCreateBoardItem( boardItem );
525 // *************************************************************************
526 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
527 // *************************************************************************
528 procedure TBoardPlugIn.DisposeBoardItem(
529 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
533 if Assigned( FDisposeBoardItem ) then
534 FDisposeBoardItem( boardItem );
538 // *************************************************************************
539 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
540 // *************************************************************************
541 function TBoardPlugIn.DownloadBoard(
542 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
546 if Assigned( FDownloadBoard ) then
547 Result := FDownloadBoard( boardItem )
553 // *************************************************************************
554 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
555 // *************************************************************************
556 function TBoardPlugIn.CreateThread(
557 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
558 inSubject : string; //
\83X
\83\8c\83^
\83C
559 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
560 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
561 inMessage : string //
\96{
\95¶
562 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
565 if Assigned( FCreateThread ) then
566 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
572 // *************************************************************************
573 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
574 // *************************************************************************
575 procedure TBoardPlugIn.EnumThread(
576 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
577 inCallBack : TBoardItemEnumThreadCallBack
581 if Assigned( FEnumThread ) then
582 FEnumThread( boardItem, inCallBack );
586 // *************************************************************************
587 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
588 // *************************************************************************
589 function TBoardPlugIn.FileName2ThreadURL(
590 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
597 if Assigned( FFileName2ThreadURL ) then begin
598 tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
599 Result := string( tmp );
600 DisposeResultString( tmp );
605 // *************************************************************************
606 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
607 // *************************************************************************
608 procedure TBoardPlugIn.LoadPlugInAPI;
612 if Assigned( Pointer( FModule ) ) then begin
613 FLoad := GetProcAddress( FModule, 'OnLoad' );
614 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
615 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
616 FPlugInMenu := GetProcAddress( FModule, 'OnPlugInMenu' );
618 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
619 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
620 FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
621 FWriteThread := GetProcAddress( FModule, 'ThreadItemOnWrite' );
622 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
623 FGetDat := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
624 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
625 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
626 FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
628 FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' );
629 FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' );
630 FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' );
631 FCreateThread := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
632 FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
633 FFileName2ThreadURL := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );