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
[51966] Re:Re:Re:Re:[질문] _msize()사용시 에러가 나네요
이윤관 [younkwan] 2416 읽음    2008-01-18 15:46
Use dynamic RTL을 체크하니까 컴파일은 됩니다.
근데 실행하니까.
char *a = malloc(100)하고 _msize(a)나 msize(a) 해보면 104가 나옵니다.
왜 할당한 크기와 다른지요?
그리고 항상 +4만큼의 값이 나온는것도 아니네요.
감사합니다.
////////////////

열씸! 님이 쓰신 글 :
: 아 project\lib 인걸로 착각했군요.
: 하지만 #pragma라고 한건 CG32.LIB를 추가하란 소리가 아니었습니다.
:
: [Linker Error] Unresolved external '___org__msize' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CG32.LIB|_msize
: [링커 에러] c:\program files\borland\cbuilder6\lib\cg32.lib 에서 사용된 _msize 외부 함수가 있는디 링크할때 찾아봐도 실체가 없더랏.
:
: 이란 소리니 cg32.lib는 있는데 _msize에 필요한 라이브러리의 링크가 없단 소리잖아요? 당연히 이미 cg32.lib가 존재하고 그걸 링크하다 에러났는데 cg32.lib를 링크한다고 달라지는건 없겠지요.
:
: _msize는 MSC에서 지원하는 함수라 그다지 써 본적 없지만,
: 프로젝트 옵션에서 Use dynamic RTL 을 체크하시면 링크엔 문제가 없으실것으로 보입니다.
: 다만 해당 프로그램을 배포하실때 필요한 CRT들을 함께 배포하셔야 하는 문제가 있을껄로 보이네요.
:
: 굳이 빌더에서 _msize를 쓰셔야 하신다면,
: 저라면
: #define msize(m) (*((int*)m - 1) - 2) 라고 선언해서
: _msize함수가 아닌 매크로로 적당히 처리해 버릴것 같네요. (속도도 빠르고 좋잖아~)
: malloc 메카니즘은 할당된 메모리 앞에 할당된 용량이나 (플랫폼에 따라 패러그래프 단위 혹은 다른 블럭단위)의 용량을 기재하게 마련이니까요
:
:     char *a = (char *)malloc(100);
:     #define msize(m) (*((int*)m - 1) - 2)
:     Caption = AnsiString(msize(a)) + ":" + _msize(a);
:     free(a);
: 이런식으로 코딩해 보시면 매크로로 만든 msize와 마이크로소프트의 런타임라이브러리 함수인 _msize가 동일하게 동작하는걸 확인하실 수 있을겁니다.
:
: younkwan 님이 쓰신 글 :
: : 콤포넌트로 만든건 아닌데요..
: : 그냥 새 프로젝트 하나 만들어서 Form1에 버튼을 클리하면 동작하도록 해도 안되고
: : 프로젝트의 WinMain()에서 해봐도 안됩니다.
: : 그리고 #pragma comment(lib, "CG32.LIB") 추가해도 안되네요...ㅠㅠ
: :
: : 열씸! 님이 쓰신 글 :
: : : 컴포넌트로 만드셨나보군요. CG32.LIB라는.
: : : 컴포넌트는 하나의 LIB라, LIB라는건 하나의 실행화일과 달리 모든 구성요소를 포함시킬 강제가 없습니다.
: : : 즉, 이경우 msize 함수를 사용하긴 했지만, 함수의 호출 내용만 들어 있을뿐 라이브러리가 포함되지 않아서
: : : 발생하는 경우겠지요.
: : : 두 가지 해결방법이 있습니다.
: : : 하나는 실행화일을 만드는 프로젝트에도 msize함수를 한번 호출해서 라이브러리가 링크 되게 하는 방법
: : : (#pragma comment(lib, "화일명") 로 직접 지정해 줘도 되겠지만)
: : : 또 하나는
: : : 컴포넌트 쪽에 #pragma package(smart_init) 넣거나 빼 보시기 바랍니다.
: : : 어떤 구조로 작성하셨는지 몰라 그냥 대강 답변해 드립니다.
: : :
: : : younkwan 님이 쓰신 글 :
: : : : malloc로 할당된 메모리의 크기를 구하려고 _msize함수를 사용했습니다.
: : : : 근데 컴파일시 Linker error에러가 발생합니다.
: : : : 원인이 뭔가요?
: : : :
: : : : [Linker Error] Unresolved external '___org__msize' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CG32.LIB|_msize
: : : :
: : : :
: : : : void test ()
: : : : {
: : : :     char *b;
: : : :
: : : :     b = (char *)malloc(100);
: : : :     Caption = AnsiString().sprintf("size=%d", _msize(b));
: : : :     free(b);
: : : : }

+ -

관련 글 리스트
51944 [질문] _msize()사용시 에러가 나네요? younkwan 1429 2008/01/18
51958     Re:[질문] _msize()사용시 에러가 나네요? 열씸! 1548 2008/01/18
51959         Re:Re:[질문] _msize()사용시 에러가 나네요 younkwan 1357 2008/01/18
51965             Re:Re:Re:[질문] _msize()사용시 에러가 나네요 열씸! 2216 2008/01/18
51966                 Re:Re:Re:Re:[질문] _msize()사용시 에러가 나네요 이윤관 2416 2008/01/18
51969                     Re:Re:Re:Re:Re:[질문] _msize()사용시 에러가 나네요 열씸! 2142 2008/01/18
51972                         감사합니다. 이윤관 1228 2008/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.