Q&A

  • VC++에서 만든 소켓DLL 호출후 종료할때 에러나네요.. 지쳐갑니다.




VC++에서 만든 DLL은 전문을 생성한뒤 전송하고 응답 전문을 수신한뒤 필요한
4가지 정보를 돌려줍니다.
델파이에서 이 4가지 정보를 돌려받기 위해 구조체를 이용했습니다.

DLL에서 구현은 기능은 다 됩니다.
문제는 호출을 했던 프로그램(델파이, 소스부분포함)이 종료되면서
그림과 같은 에러가 발생합니다. 도저히 이제 지쳐서..

그림에서 보면 타이틀에 소켓이라고 적히는데 그것과 무슨 연관이 있는지..
암튼 고수님들의 답변 좀 부탁드립니다. --;



대강의 형태는 아래와 같습니다.
--------------------------------------------------------------------------------
| VC++에서 DLL 소스입니다.    --------------------------------------------------
--------------------------------------------------------------------------------

DllType int __stdcall CaAuthRequest(CASHMemberRes *pCaResBuf,int nTrdNo,long nSupAmt,long nVatAmt,long nSvcAmt,int nTrader,int nTrdYn, char* sCheckNo,int nPinYn)
{                                  
return theApp.m_oCaAuth.CaAuthRequest(pCaResBuf,nTrdNo,nSupAmt,nVatAmt,nSvcAmt,nTrader,nTrdYn,sCheckNo,nPinYn);
}
DllType int __stdcall CaAuthRequestA(CASHMemberRes *pCaResBuf,int nTrdNo,long nSupAmt,long nVatAmt,long nSvcAmt,int nTrader,int nTrdYn, BSTR sCheckNo,int nPinYn)
{
return theApp.m_oCaAuth.CaAuthRequest(pCaResBuf,nTrdNo,nSupAmt,nVatAmt,nSvcAmt,nTrader,nTrdYn,(char *)sCheckNo,nPinYn);
}


typedef struct
{
  char AuthNum[9];
  char BussinessName[20];  
  char ResCode[4];
  char ResMsg[20];
}CASHMemberRes;



int CaAuthRequest(CASHMemberRes *pCaResBuf, int nTrdNo, long nSupAmt, long nVatAmt,long nSvcAmt,int nTrader,int nTrdYn, char* sCheckNo,int nPinYn);
int CCaAuthComm::CaCallAuthRequest(int nTrdNo, long nSupAmt, long nVatAmt,long nSvcAmt,int nTrader,int nTrdYn, char* sCheckNo,int nPinYn,char* sYYYYMMDDHHMMSS,char* sAuthNum)
{
}




--------------------------------------------------------------------------------
| 델파이에서 DLL 호출하는데 소스입니다. ----------------------------------------
--------------------------------------------------------------------------------


function CaAuthRequest(pReqBuf: PCAppr; nTrdNo, nSupAmt, nVatAmt,nSvcAmt, nTrader,nTrdYn : integer; sCheckNo : pchar; nPinYn:integer):integer; stdcall; external 'ktauthcomm.dll' Name 'CaAuthRequestA';


type
PCAppr = ^CAppr;
CAppr = record

AuthNum        : array[0..8] of char ;
BussinessName  : array[0..19] of char ;
ResCode        : array[0..3] of char ;
ResMsg         : array[0..19] of char ;

end;



procedure TForm1.sbtn_AuthReqClick(Sender: TObject);
var
  TmpC : PCAppr;
  i : integer;
  pLogFile : String;
begin

  SetServer(pchar(edt_SvrIP.Text), StrToInt(edt_SvrPort.Text));

  New(TmpC); // <- 이거로 할당하고
  pLogFile := 'd:\test.log';
  i := SetLogFile(1, pchar(pLogFile));
  i := CaAuthRequest(TmpC,
                StrToInt(edt_BillNo.Text),
                StrToInt(edt_SupAmt.Text),
                StrToInt(edt_VatAmt.Text),
                StrToInt(edt_SvcAmt.Text),
                StrToInt(edt_TraderGbn.Text),
                Strtoint(edt_TrdGbn.Text),
                pchar(edt_ChkNoGbn.text),
                strToint(edt_PinGbn.Text)
                );

  ListBox1.Items.Clear;
  ListBox1.Items.Add(' "' + TmpC^.AuthNum       + '"');
  ListBox1.Items.Add(' "' + TmpC^.BussinessName + '"');
  ListBox1.Items.Add(' "' + TmpC^.ResCode       + '"');
  ListBox1.Items.Add(' "' + TmpC^.ResMsg        + '"');
  Dispose(TmpC); // <- 이거로 메모리 해제 했습니다.

  MessageDlg('작업완료', mtInformation,[mbOk],0);
  // 여기 다 실행되고 ListBox1에 결과 다 나오도록 에러는 안납니다.
  // 그러나 델파이에서 프로그램을 종료하는 순간 그림과 같은 에러가 나옵니다.
end;
4  COMMENTS
  • Profile
    존재의바다 2004.10.14 07:51
    문제를 정면돌파하지 마시고
    우회하면 어떨까 합니다.

    동작도 잘 되고 하면
    굳이 종료시점에 장애나는 것을 없애려고 하지마시고

    장애나는 화면을 안보이게 하는 게 어떻겠습니까?

  • Profile
    권성욱 2004.10.14 02:36


    델마당에도 질문 하셨던거 같던데...

    Dll 을 호출 할때 stdcall로 호출하지 마시고, cdecl로 호출 하면 됩니다.
  • Profile
    김명찬 2004.10.13 03:31
    VC++로 만든 DLL이 크게
    1 전문생성
    2 연결(connect)
    3 전송(send)
    4 수신(receive)
    이런과정을 거치는데요. 2 연결을 하다가 실패하면 에러 나오구요..
    그리고 델파이 호출 프로그램을 종료하면 에러가 나오지 않습니다.

    다른거 다 막아봐도 마찬가지네요..
    2 연결 이후에는 종료할때 무조건 에러나 나네요..
    물론 기능은 다 합니다. 단지 종료할때... 에휴..
  • Profile
    석주현 2004.10.13 18:14
    혹시 종료 하기 전에 커넥션을 안끊으신건 아닌지...ㅠ_ㅠ
    • 정동욱
      2004.10.15 03:29
      [...] FTimer.Enabled = True 하면 무조건 타이머 돌아 갑니다.     if not...
    • 정동욱
      2004.10.15 04:04
      [...] 구현 하는 방법은 스킬에 따라 여러가지 있겠습니다만 델파이답게 구현 하는법을 한가지 ...
    • 진돌
    • 2004.10.15 01:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이승민
      2004.10.15 01:45
      자료실에 가셔서 ACM 관련 내용을 찾아서 참고 하시면 될것같네요. 콤포넌트들과 데모프로그램 들도 있...
    • 신철우
    • 2004.10.14 22:44
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 우하하
      2004.10.15 01:30
      혹시 레이블을 디자인모드에서 먼저 생성하셨다면.. var   TempLabel : array[0..2] of ^TLab...
    • 정동욱
      2004.10.14 23:22
         [줄바꿈]    Label1.WordWrap := True;    Label1.Caption :=...
    • 모영철
      2004.10.14 23:20
      MyLabel : array[0..100] of TLabel; 위처럼 선언 하시면 되구요.. 전 델파이6인데 줄바꿈 되는데요......
    • Maru
    • 2004.10.14 22:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Maru
      2004.10.15 00:30
      아래의 경우 함수안에서 19를 자를때 19 하고뒤에 공백한칸을 포함시켜서 에러가 났네요.. 19만딱자르니...
    • 김길현
    • 2004.10.14 09:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 우하하
      2004.10.15 02:02
      type   PBitmap = ^TBitmap;    procedure loadjpgfile(Path_Name:PChar; NowBmp: ...
    • 정동욱
      2004.10.14 18:57
      [...] 위에서와 같이 imgbmp는 Free 하면 않됩니다. 객체의 동적생성 이니 언젠가는 Free 해야 하...
    • 박원용
    • 2004.10.14 05:24
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 일그니
      2004.10.14 21:26
      혹시나 하는 맘으로 적어봅니다. 쿼리 컴포넌트의 질의어중 (insahyun / insacho)*100 AS insapercent ...
    • 모영철
      2004.10.14 21:13
        if  (QryGongJ.FieldByName('AFTER_QTY').AsString = '')   and (QryGon...
    • 박원용
      2004.10.15 09:22
      먼저 도움주셔서 정말 감사하구요.. %는 잘됩니다.. 그런데.. 특정 셀에 대한 조건을 부여했을때 색깔바...
    • 기타맨
    • 2004.10.14 04:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 기타맨
      2004.10.14 18:53
      답변자료에 있군요.
    • 희아빠
    • 2004.10.14 02:58
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 스바쉬
    • 2004.10.13 23:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이승민
      2004.10.14 01:02
      http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?db=dmdres2&mode=read&num=648&page=1&backdepth=1 ...
    • 스바쉬
      2004.10.14 18:01
      .
    • 모영철
      2004.10.14 00:05
      그런경우 어떻게 값을 넣어줬는지는 모르겠는데요.. WM_USER + X 이렇게 해서 메세지를 날려서 받...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.10.14 00:37
      그래도 머가 먼지 모르겠네요...이쪽은 초보라 그런가벼요...
    • 최용일
      2004.10.14 01:28
      안녕하세요. 최용일입니다. 걍 메세지를 보내세요... PostMessage(CheckBoxHandle, BM_SETCHECK, BST...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.10.14 02:36
      감사합니다... 아래걸루 하니까 되구요...위에것은 그림만 되네요... 근디 버튼은 어떻게 하는지????...
    • 최용일
      2004.10.14 05:07
      안녕하세요. 최용일입니다. TSpeedButton이면 윈도우컨트롤이 아니니까 핸들도 없을테구요... 그 스...
    • 우하하
      2004.10.15 02:10
      비슷한 경험이 있었던 기억이.. TRichEdit 써보시죠. Win32에 있습니다.
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.10.13 21:57
      혹시 그 컴포넌트들이 한 폼에 있는 것은 아니것죠... 비슷한 부분끼리 그룹으로 입력을 받으면 ...
    • 희망봉
    • 2004.10.13 18:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2004.10.13 22:07
      무슨 말씀이신지.... 스파이에서 핸들이 나오지 않는다면 그건 윈도우가 아닙니다. 버튼이나 폼들. 콤보...
    • 김명찬
    • 2004.10.13 02:54
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 존재의바다
      2004.10.14 07:51
      문제를 정면돌파하지 마시고 우회하면 어떨까 합니다. 동작도 잘 되고 하면 굳이 종료시점에 장애나는...
    • 권성욱
      2004.10.14 02:36
      델마당에도 질문 하셨던거 같던데... Dll 을 호출 할때 stdcall로 호출하지 마시고, cdecl로 호출 ...
    • 김명찬
      2004.10.13 03:31
      VC++로 만든 DLL이 크게 1 전문생성 2 연결(connect) 3 전송(send) 4 수신(receive) 이런과정을 거치...
    • 석주현
      2004.10.13 18:14
      혹시 종료 하기 전에 커넥션을 안끊으신건 아닌지...ㅠ_ㅠ
    • 이승민
      2004.10.14 01:08
      저는 서버쪽에서 클라이언트가 접속되었을 때 일정시간에 한번씩 Ping data 를 보냅니다. 뭐 Ping 이라...
    • 최용일
      2004.10.13 02:23
      안녕하세요. 최용일입니다. 원래 TCP자체가 그러한 경우에 대해서 마땅히 대처할만한 방법을 제공하지는...
    • 김정은
    • 2004.10.12 21:18
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 서기원
      2004.10.13 01:17
      예전에 여긴가 델코에서 말씀하신 문제를 포함하여 TWebBrowser의 버그에 대해서 글을 읽은 것 같은데.......
    • 신철우
      2004.10.15 19:10
      아래경로는 설명만 잔뜩해놓고 다운로드링크가 없네요. 확실하게 알려주시면 고맙겠습니다.
    • 최용일
      2004.10.15 20:47
      안녕하세요. 최용일입니다. 글좀 읽어보세요. 위에 왼쪽에서 네번째에 EmbeddedWB이라고 써져 있잖아...
    • 김정은
      2004.10.13 22:45
      설치과정이 많이 되나요? 에구구~~그래도 함 깔아바야겠네요~ 즐거운 시간 많이 많이 보내세요~~
    • 이용남
      2007.02.02 19:04
      uses     RVClass, RVProj, RVCsStd;   var    ...
    • 정동욱
      2004.10.12 22:35
      [...] 결론만 말씀 드리면 TEvent 를 사용 해야 합니다. Execute 의 끝행에서 Event.WaitFot...
    • 최용일
      2004.10.12 07:51
      안녕하세요. 최용일입니다. 두개의 핸들값이 다르다면 님께서 다른 윈도우의 핸들을 찾으신겁니다. 윈도...