|
해결방법(?)을 찾아냈네요..^^ 삼일만에 -_-;
직접 RegisterFTPListParser() 함수를 호출할 필요가 없네요.
간단히 정리를 해보면
Indy 9에서는 딱히 다른 것을 할 필요없이 FTP DirectoryListing을 사용할 수 있었습니다.
그런데 Indy10에서는 그냥 DirectoryListing을 사용하려 하면, Parser가 등록되어 있지 않다고 메시지를 토해냈습니다.
Indy10에서는 서버 종류별로 FTP에서 얻은 리스팅을 Parse 하는 Parser가 30여종류가 있고, 이를 미리 등록을 해놔야 합니다.
처음에는 Parser를 등록하는 함수가 있는듯하길래 아래처럼 등록을 하려고 했었습니다.
#include <idFTPListParseUnix.hpp>
...
RegisterFTPListParser(__classid(TidFTPLPUnix));
이렇게 하니 링크 중 Unresolved external 'RegisterFTPListParser(...'... 라 오류가 나서
RegisterFTPListParser가 선언되어 있는 idFTPListParseBase.hpp 를 include 하고
#pragma link "IdFTPListParseBase" 로 링크를 해주어도..계속 오류가 났었습니다.
근데 자세히 살펴보다보니 각 파서별로 .pas 소스를 보니 initialization 할 때 자기 스스로 RegisterFTPListPaser를 불러주고있었습니다...그래서 이 함수를 안쓰고 파서자체만 링크시켜주니 잘 되네요.
#include <IdFTPListParseUnix.hpp>
#pragma link "IdFTPListParseUnix"
이런식으로 원하는 파서들을 등록해주면 됩니다. 만약 30여개의 모든 파서를 몽땅 포함시키고 싶으면
#include <IdAllFTPListParsers.hpp>
#pragma link "IdAllFTPListParsers"
처럼 사용하면 됩니다.
30개를 모두 포함시켜보니, Unix 파서 하나만 포함시켰을때에 비해서 Debug 빌드의 경우
약 100KB 정도 실행파일크기를 뿔리네요..
xiles 님이 쓰신 글 :
: Indy10 TIdFTP 를 사용하려는데,
: ListParser를 등록하기 위해서 RegisterFTPListParser 함수를 사용했습니다.
:
: 근데 링크를 하면서 Unresolved external 'RegisterFTPListParser(TMetaClasss *const)' referenced from ...
: 오류가 나네요..ㅠㅠ
:
: 델파이로 하면 uses 에 IdFTPListParserBase 를 추가해주면 문제 없이 되는데, 이상하게 빌더로 하기만 하면 계속 오류가 나네요..-_-;
:
: Indy10 소스에 있던걸 다시 컴팔해서 bpi, lib 파일 만들어서 교체를 해봐도 해결되지 않네요..
:
: 혹 뭐가 문제일지 아시는 분 계신가요...
|