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
[1578] Re:[질문] 델파이인데 이걸씨빌더로 바꾸었는데 잘 안됩니다.
박지훈.임프 [cbuilder] 3440 읽음    1999-07-13 00:00
:
: procedure TForm1.Button1Click(Sender: TObject);
: var
: ComName : ^string;
: ComSize : integer;
: ret : boolean;
: begin
: ComSize := MAX_COMPUTERNAME_LENGTH +1 ;
: New(ComName);
: ret := GetComputerName( PChar(ComName), Comsize );
: if ret = true then
: ShowMessage(PChar(ComName));
: end;
:
: 위에것이 델파이팁입니다. 자기 컴퓨터의 이름을 알아내는것
: 입니다. 그런데 여러가지 이해가 안가는 부분이 있습니다.
: 이걸 씨빌더로 고쳐봤는데 안됍니다. 제가 델파이를 모르기
: 때문이죠.
:
: char Buff[MAX_COMPUTERNAME_LENGTH];
: unsigned long *size;
: size=(unsigned long*)MAX_COMPUTERNAME_LENGTH +1;
: GetComputerName(Buff,size);
: Label3->Caption=Buff;
:
: 이렇게 했습니다.
: 위에 델파이에선 new라는 함수를 썼는데 용도를 몰라서 못했습
: 니다. 부디 가르쳐 주세요
:
: 저번에 포맷 답변해주셔서 감사드립니다.


임펠리테리입니다.

아직 API 함수를 사용하는데 익숙하시지 않으신 모양입니다.
API 함수중 문자열이 아닌 포인터를 인자로 받는 함수들, 즉 위의 GetComputerName() 같은 경우
두번째 인자가 포인터라고 해서 포인터로 선언해서 값을 넣은 다음 넘겨주는 것이 아닙니다.
포인터가 가리킬 변수를 만들고, 그 변수에 필요한 값을 넣은 다음 넘겨줄 때만 포인터로
넘겨주면 되죠. 방법은, 간단히 변수의 포인터를 구하는 연산자 &를 쓰면 되겠죠?

물론, 위에서 하신 것처럼 포인터 변수를 선언하고 사용해도 관계는 없습니다만,
반드시 메모리를 할당해줘야 하겠죠. 안그러면 억세스바이얼레이션 에러가 발생할 겁니다.
원래의 델파이 소스에서도 그렇게 하면 되는데, 괜히 메모리를 할당하고 넘겨주느라
소스가 필요없이 지저분해졌군요.

그래서.. 보여주신 소스를 고쳐보면,

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char Buff[MAX_COMPUTERNAME_LENGTH+1];
    unsigned long size =MAX_COMPUTERNAME_LENGTH+1;
    GetComputerName(Buff, &size);
    Label3->Caption=Buff;
}

이렇게 해주어야 합니다.

그럼 도움되시길...

+ -

관련 글 리스트
1576 [질문] 델파이인데 이걸씨빌더로 바꾸었는데 잘 안됩니다.ㅠㅠ 박세율 3474 1999/07/13
1578     Re:[질문] 델파이인데 이걸씨빌더로 바꾸었는데 잘 안됩니다. 박지훈.임프 3440 1999/07/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.