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
[35740] [질문] DLL의 함수를 쓰는데 메모리가 이상한거 같습니다.
김태우 [withtw] 810 읽음    2004-06-18 08:27
DLL을 로딩하여 DLL함수를 사용하고 있습니다.
그런데 DLL함수를 호출하고 나서 다음 라인에서 wsprintf()를 사용하면 프로그램이
중단되거나 이상한 값이 써집니다.

소스를 예를들어 설명하자면...
(//*** 로 된부분이 문제가 발생하는 부분입니다.)


// 제가 만든 함수이고 DLL함수를 이용해서 값을 가져오는 기능을 합니다.
BOOL __fastcall TMainForm::myFunc(HANDLE hCTAPI, String Tag_Name,  time_t timet, double rPeriod,
        int iCount, int iDisplayMode, int iMilliseconds, float *pData)
{       
    char sResult[4096];
    char sStr[4096];             
         char sErrorText[4096];

    wsprintf(sStr, "ApiTrnGetTable(\"%s\",%d,%d.%03d,%d,%d,%d)", Tag_Name.c_str(),
        timet, (int)rPeriod, int(rPeriod*1000)%1000, iCount, iDisplayMode, iMilliseconds);
   
         //
         //*** 여기가 DLL함수(pctCicode)를 호출하는 부분입니다. sResult에 값이 들어가는 거죠.
         //  
         rtv = pctCicode( hCTAPI, sStr, 0, 0, sResult, sizeof(sResult), NULL);
        

         //
         //*** 여기서 다시 wsprintf로 sStr을 쓸려고 하면 프로그램이 중단되거나
         //    sStr에 이상한값이 써집니다.
         //
    wsprintf(sStr, "ApiTableValue(%d)", i);   


    rtv = pctCicode( hCTAPI, sStr,  0, 0, sResult, sizeof(sResult), NULL);
    return TRUE;
}


함수안에 있는 char배열의 크기를 2048정도만 해주면 에러가 발생하고, 4096으로 늘려주면
괜찮습니다. DLL를 사용하면서 메모리가 잘못된거 같은데, 이런 경우는 처음이라
문제가 뭔지 잘 모르겠습니다.

아시는분 계시면 도움 부탁합니다.


+ -

관련 글 리스트
35740 [질문] DLL의 함수를 쓰는데 메모리가 이상한거 같습니다. 김태우 810 2004/06/18
35751     Re:[질문] DLL의 함수를 쓰는데 메모리가 이상한거 같습니다. Builder MySelf 836 2004/06/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.