|
AnsiString __fastcall ShowMessage(AnsiString msg)
에서 일단 TEScnro::가 빠져있습니다.
그리고 ShowMessage는 빌더에서 지원해 주는 함수인데 선언을 보시면 extern으로 되어있습니다.
어떤 프로젝트로 만드신 것인지 모르겠지만, 재정의 된게 아닌가 생각됩니다.
이상해 님이 쓰신 글 :
: 코드 가드를 이용했더니 다음과 같은 에러를 뱉어냅니다...
:
: Error 00164. 0x100C00 (Thread 0x0CA0):
: Method called on invalid object: Attempt to access 4 byte(s) at 0x00000000.
: Call Tree:
: 0x00414B8A(=AAAA.exe:0x01:013B8A) C:\test\EScnro.cpp#77
: ===> 에러가 EScnro에서 발생해서 AScnro까지 던져주고 있습니다...
: 0x0043E67D(=AAAA.exe:0x01:03D67D) C:\test\DScnro.cpp#289
: 0x004497E0(=AAAA.exe:0x01:0487E0) C:\test\CScnro.cpp#132
: 0x0044A9E7(=AAAA.exe:0x01:0499E7) C:\test\BScnro.cpp#293
: 0x0044A30E(=AAAA.exe:0x01:04930E) C:\test\AScnro.cpp#229
: 0x400EE4E7(=vcl60.bpl:0x01:03D4E7)
: ------------------------------------------
: 위와 같은 에러를 수백개 뱉어내네요....메모리도 콸콸 세고.......-_-;;
: 문제는 invalid object라는 에러인데.... EScnro.cpp는 객체를 생성을 하지않고 쓰고 있습니다
: 여기서 제가 의문이 드는것은 객체 생성을 하지 않고 다음과 같이 사용했을때
: 런타임시에 객체가 없다고 에러를 뱉어야 하는데 어떻게 빌더가 에러없이 도는지 이해가 가지 않습니다...
:
: ============header 파일====================
:
: #ifndef EScnroH
: #define EScnroH
:
: //---------------------------------------------------------------------------
: class TEScnro
: {
: private: // User declarations
: public: // User declarations
: __fastcall TEScnro();
: AnsiString __fastcall ShowMessage(AnsiString msg);
: };
: //---------------------------------------------------------------------------
: extern PACKAGE TEScnro *EScnro;
: //---------------------------------------------------------------------------
:
: #endif
:
:
: ============cpp 파일====================
: #include "EScnro.h"
:
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
:
: TEScnro *EScnro;
:
: __fastcall TEScnro::TEScnro()
: {
: }
:
: AnsiString __fastcall ShowMessage(AnsiString msg)
: {
: return "객체생성없이 왜 도냐?";
: }
:
: ============================================================================
:
: 만약 일반 c처럼 생각해서 객체 없이 함수만 호출한다고 한다면...
:
: TEScnro *EScnro; ==> TEScnro EScnro; 이렇게 포인터 없이 사용해야하는거 아닌가요??(struct 사용할때처럼...)
: 그리고 EScnro->ShowMessage(msg); 이렇게 사용하는게 아니라
: EScnro.ShowMessage(msg);로 사용하는거 아닌가요??
:
: 위와 같이 코딩하면 왜 수행이 되는지 알려주시면 감사하겠습니다...
: 또한 메모리 누수 현상과도 관계가 있는지요??
:
: 조그만 도움이라도 부탁합니다...ㅜㅜ
|