현재 이미지 핸들링 관련 프로젝트를 진행 중에 있습니다.
플로우를 간략하게 설명 드리겠습니다.
1. VC++을 이용하여 동적 DLL을 제작하여 델파이 엔지니어에게 전달 하였습니다.
2. 델파이 프로그램에서 저희가 만들어준 DLL을 링크 합니다.
여기서 잠깐 : 저희가 만들어준 DLL에서는 DLL과 저희쪽 Application과 Socket을 연결하여
이미지 데이터를 주고 받습니다.
3. 델파이에서 이미지 하나를 DLL을 이용하여 저희쪽 Application에 전송합니다.
4. 저희쪽 프로그램에서는 델파이에서 보내는 이미지를 DLL을 통해 받은 후 적당한 처리를 수행 합니다.
수행이 다 끝나면 보내온 DLL로 결과를 보냅니다.(이미지와, Float형 값, 정수형값등)
5. DLL에서 저희쪽 Application에서 보낸 결과를 받은 후 델파이로 결과를 가지고 갈 것을 요청하는 윈도우
메시지를 SendMessage를 이용하여 델파이에게 통보 합니다.
6. 그러면 델파이는 DLL함수를 이용하여 결과값을 가지고 갑니다.
그런데 이때 델파이 프로그램이 비정상적으로 죽어 버립니다.
결과값을 다 가지고 가고 나서 말이져.
그런데 델파이 개발자는 저희 쪽에서 DLL을 잘 못 만들어 그렇다고 버팁니다.
어떻게 해야 델파이에서 정상적으로 값을 받고 나서 죽지 않을 까요... 미칩니다.
델파이 소스입니다.
procedure TForm1.getClick(Sender: TObject);
var fPhoto_img : TMemorystream;
fPhoto_img_jpg :TJpegimage;
l_return:integer;
begin
// if l_face_recv_ok = 1 then
begin
try
fillchar(cns_face_size,sizeof(cns_face_size),#0);
l_return := GetResultData(@cns_face_value, @cns_face_size, cns_face_img, @cns_flag); ==> 이부분이 DLL의 함수를 호출 하는 부분
if l_return = 1 then showmessage('정상') ==> 이 메시지 까지 정상적으로 나온 후 델파이 프로그램이 죽어요
else
showmessage('실패');
memo1.Lines.Add(inttostr(cns_flag)) ;
{
GetResultData1(@cns_face_value);
memo1.Lines.Add(FloatToStr(cns_face_value)) ;
GetResultData2(@cns_face_size);
memo1.Lines.Add(inttostr(cns_face_size)) ;
GetResultData3(cns_face_img);
memo1.Lines.Add(string(cns_face_img)) ;
GetResultData4(@cns_flag);
memo1.Lines.Add(inttostr(cns_flag)) ;
}
{
fPhoto_img := TMemorystream.Create;
fPhoto_img.WriteBuffer(cns_face_img,cns_face_size);
fPhoto_img.Position := 0;
fPhoto_img_jpg := TJpegimage.Create;
fPhoto_img_jpg.LoadFromStream(fPhoto_img);
Image3.Picture.Graphic := fPhoto_img_jpg;
fPhoto_img.Free;
fPhoto_img_jpg.Free;
}
except
end;
end;
end;
이런 문제 저희 DLL에서 수정을 해야 하나요...?
이거 델파이쪽에서 해결해야 할 문제 인듯 합니다만....
|