안녕하세요.
Indy HTTP 를 사용하여 DLL을 작성하여 사용중입니다만
DLL 함수를 호출하여 Parameter를 넘겨주면 Servlet에서 값처리후 전송데이터를 받아서 다시 보내주는 형식으로 개발중인데요.
[VB에서 dll호출 ---> DLL에서 Servlet호출 --> VB로 Return]
지금 현재 테스트 프로그램을 이용하여 dll을 테스트하면 아주 가끔씩 Access Violation 오류가 나타납니다.
VB에서는 dll호출 후 VB프로그램 자체가 죽어버리는 현상때문에 잡을 수가 없네요.
테스트 프로그램에서
implementation
function HttpReceiptSvr(OCSHEAD, OCSDATA, OCSTEMP : pchar) : Pchar; stdcall; external 'HttpDll.dll';
function HttpResultSvr(JOBGBN, RTNGBN, OCSHEAD, OCSDATA, OCSTEMP : pchar) : Pchar; stdcall; external 'HttpDll.dll';
strData := '';
for i := 0 to Form1.Memo4.Lines.Count -1 do
strData := strData + Form1.Memo4.Lines.Strings[i];
try
strResult := HttpResultSvr(PChar(Form1.Edit5.Text),
PChar(Form1.Edit11.Text),
PChar(Form1.Edit6.Text),
PChar(strData),
PChar(Form1.Edit8.Text));
//1. 위의 문장에서 dll은 정상처리 되지만 호출 후 Access Violation 오류가 발생합니다.[리턴시 오류인것으로 추측]
Form1.Memo2.Lines.add(strResult);
except
//2.그리고 여기로
Form1.Memo2.Lines.Add('error--------------');
end;
소스상에서 HttpResultSvr 이거 실행 시에 가끔 error--------- 이게 떨어지네요 ㅜㅜ
dll에서는 로그를 찍어봐도 정상적으로 처리가 다 되구요.
그리고 Dll소스는 아래와 같습니다.
try
Url := 'http://localhost/ResultSvr';
IdHTTP1.Post(Url,source,response);
rtn:= trim(response.datastring);
Break;
except on E: Exception do
begin
if i = 2 then
begin
try
if IdHTTP1 <> nil then
IdHTTP1.Free;
except
end;
Result := '00016|';
Exit;
end;
if pos('Connect', e.Message) > 0 then
begin
try
if IdHTTP1 <> nil then
IdHTTP1.Free;
except
end;
Result := '00015|';
Exit;
end else
begin
i := i + 1;
end;
end;
end;
dll을 초기화 해야 하는건지...아니면 다른 문제인지 급한데
감을 못잡겠습니다. 것두 30번 실행시 1번씩 떨어지는 문제라..
많은 조언 및 답변 부탁드립니다