C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[5779] Re:Re:dll 사용에 관하여 소스-c++ 버그로 생각됩니다.
박병순 [] 2705 읽음    2001-02-28 08:32
이영수 님이 쓰신 글 :
: 로직상의 문제 인듯 싶습니다.. 다시 말해..위의 내용으론 알수 없다는 거죠..그 상황을 테스트
: 용으로 짦막하게 만들어서..올리시는게 답을 빨리 구할수 있는 방법이라고 생각합니다.
: 글구..메시지창을 닫으면 에러가 나고 프로그램이 종료한다고 했는데..메시자창을 닫을때
: 메인프로그램을 종료하는 루틴과 연결 된듯 싶습니다. 글구 에러는 Load한 프리안하고 종료하면
: 발생하는 에러 인듯 싶네요..그러니깐 정리하면 메시지 창과 프로그램 종료 모듈과의 어떤연관성이 있는듯 더 정확한 답을 원하시면..소스를 올리심이 좋으듯 싶네요..

답변 감사합니다.
덧붙여서 소스내용을 올립니다.


메인.cpp
{
:
:
typedef void (__stdcall *IMPPROC)(String);
IMPPROC CallMs;
HINSTANCE dllInstance = LoadLibrary("sub.dll");


    if(dllInstance){
       CallMs=(IMPPROC) GetProcAddress(dllInstance,"_CallM");
       if(CallMs)
         CallMs(" ");
    }

    :
    :

    FreeLibrary(dllInstance);

:
}

sub.cpp  // dll로 작성됨
{
:
   rr830f1 = new Trr830f1(NULL); // QuickRep을 가지고 있는 폼입니다.
  
      rr830f1->SubBank(cbSigu->Text,FormatDateTime("yyyymmdd",
             dtpRcp1->Date),FormatDateTime  ("yyyymmdd",dtpRcp2->Date));

      rr830f1->QuickRep1->Preview();


   delete rr830f1;

:
:
}
참고 : Action = caFree;  // 사용됬음


rr830f1.cpp
{
함수 내용 "SubBank"
{
:
:
typedef void (__stdcall *IMPPROC)(String,char,long);
IMPPROC CallMs;
HINSTANCE dllInstance = LoadLibrary("msg.dll");

   if(dllInstance){
       CallMs=(IMPPROC) GetProcAddress(dllInstance,"_CallM");
       if(CallMs)
         CallMs("처리중입니다",'s',0);
   }
   :
   :

   CallMs(" ",'p',20);
   :
  
   CallMs(" ",'h',0);
   FreeLibrary(dllInstance);

:
}

}

sub.h
{
:
  extern "C" __declspec(dllexport) void  CallM(String Recvs);
:
}


msg.cpp  // dll로 작성됨
{

void  CallM(String msgs,char sh,long perc){
  if (sh == 's'){

    char currini[50]=" ";

    restf = new Trestf(NULL);
    GetCurrentDirectory(sizeof(currini),currini);
    strcat(currini,"\\running.avi");
    restf->Animate1->FileName = currini;

    restf->Caption = msgs;
    restf->CGauge1->Progress = 0;
    restf->Label1->Caption = FormatDateTime("hh:mm",Now());
    restf->Animate1->Active = true;
    restf->Show();
    restf->Update();
  }
  else{
    if (sh == 'p'){
      if(restf->CGauge1->Progress + perc > 100)
         restf->CGauge1->Progress = 99;
      else
         restf->CGauge1->Progress += perc;
      restf->Update();
    }
    else{
      restf->Animate1->Active = false;
      restf->CGauge1->Progress = 0;
      delete restf;
    }
  }
}


}

msg.h
{
:
  extern "C" __declspec(dllexport) void  CallM(String msgs,char sh,long perc);
:
}

그럼 답변 기다리겠습니다.


CGauge에 오류로  생각됩니다.
메세지 창에서 이걸 지우닌까 오류가 발생하지 않았거든요
그럼 안녕히, 그리고 답변 감사합니다.



+ -

관련 글 리스트
5762 dll 사용에 관하여 박병순 2564 2001/02/27
5774     Re:dll 사용에 관하여 이영수 2518 2001/02/27
5779         Re:Re:dll 사용에 관하여 소스-c++ 버그로 생각됩니다. 박병순 2705 2001/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.