Automation Object 형태는 기본적으로 액티브X 개발 목적으로 만들어진 것이 아닙니다. 델파이의 구버전들에서는 Automation Object가 액티브X 개발에 사용되었을 수도 있는데, 델파이의 여러 버전 히스토리에서 액티브X 지원이 정형화되기 전의 방식이었을 것으로 생각됩니다. 델파이의 최근 버전들에서는 액티브X의 내부 구현이 많이 바뀌어서 Automation Object가 액티브X로 동작하는 데에 문제가 있을 수 있을 것 같습니다.
제가 아는 한에서는, 액티브X를 만들기 위해 델파이에서 정식으로 지원되는 방식은 다음의 두가지 뿐입니다.
ActiveX -> Active Form - 일반적인 델파이 폼과 비슷하게 나타나는 TActiveForm에 코드를 추가해서 개발하는 방식.
ActiveX -> ActiveX Control - VCL 형태로 만들어진 델파이 컴포넌트를 래핑해서 액티브X로 만드는 방식.
별중검 님이 쓰신 글 :
: ActiveX Library > Automation Object 형식으로 만들었고, 업로드 부분은 아래와 같이 작성하고
: html 소스에서 javascript로 AXUpload.Upload('c:\log.txt') 형태로 불러 사용했습니다.
:
: 하지만 Access violation at address 0CE7FCB0 in module 'AXUPDA~1.DLL'. Read of address 00000148 에러가 납니다.
:
: (하지만 ActiveX Library > ActiveX Form 으로 생성하고 폼에서 버튼 클릭 시 아래와 동일하게 하면
: 정상적으로 동작합니다.)
:
: Automation Object 형식으로 DLL 만들어서 사용할 경우에는 왜 Access violation가 나는지
: 해결방법에 대해서 도움 부탁 드립니다. ㅠㅠ
:
: procedure TAXUpload.Upload(const inSrcFile: WideString);
: var
: Stream: TStringStream;
: Params: TIdMultipartFormDataStream;
: begin
: Stream := TStringStream.Create('');
: try
: Params := TIdMultipartFormDataStream.Create;
: try
: Params.AddFile('data', inSrcFile, 'application/octet-stream');
: try
: IdHTTP1.Post('
http://domain.com/upload.php', Params, Stream);
: except
: on E: Exception do
: ShowMessage('Error encountered during POST: ' + E.Message);
: end;
: ShowMessage('전송 완료');
: finally
: Params.Free;
: end;
: finally
: Stream.Free;
: end;
: end;