Q&A

  • 왕초보 질문 2
procedure TForm1.Button1Click(Sender: TObject);
var
  MyCaption, MyText : String;
begin
  MyCaption := '캡션';
  MyText := '텍스트';
  Application.MessageBox(MyText, MyCaption, MB_OK);  <- 여기서 에러가
end;

강좌에 나와있는대로 했는데(강좌는 델파이5, 저는 델파이 7 사용) 컴파일 하면 에러가 나네요.

[Error] Unit1.pas(32): Incompatible types: 'String' and 'PAnsiChar'
[Error] Unit1.pas(32): Incompatible types: 'String' and 'PAnsiChar'

에러 원인과 답변 부탁드립니다.
1  COMMENTS
  • Profile
    이중철 2005.04.11 22:22
    에러원인은 글자 그대로 해석하세요
    String 과 PAnsiChar는 타입이 맞지 않습니다.
    Incompatible types: 'String' and 'PAnsiChar'

    이뜻은 당신(프로그래머)이 스트링으로 정의된 변수를 억지로 PAnsiChar로 정의된 파라메터에
    집어넣으려고 한다. 나는(델파이 컴파일러) 이것을 절대로 용인할 수 없으므로 타입을 제대로
    맞추지 않으면 컴파일 해 줄수 없다.

    function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;

    보시는바와 같이 타입이 Pchar인데 스트링으로 억지로 집어넣었다는 이야기 입니다.

    타입을 맞추어 보세요

    물론..

    Application.MessageBox(PCHAR(MyText), PCAHR(MyCaption), MB_OK);

    일단 스트링은 이런식으로 Pchar(...)로 타입캐스팅하면 됩니다.

    이것도 내부적으로 이야기 할것이 너무 많아서...에고...

    생략하는것이 지금 단계에서는 맞게네요

    그럼이만...