외부 함수

외부 함수 (External functions)

external 수정자는 외부 오브젝트 파일에 있는 함수를 선언하는 데 사용해요. 코드에서 그 함수를 사용할 수 있게 해주고, 링크 시점에 구현이 담긴 오브젝트 파일을 링크해야 해요.

출처: 문서

본문

external 수정자(modifier)는 외부 오브젝트 파일에 있는 함수를 선언하는 데 사용해요. 코드 안에서 그 함수를 사용할 수 있게 해주고, 링크 시점에 그 함수·프로시저 구현이 담긴 오브젝트 파일을 링크해야 하죠.

이 지시어는 사실상 함수·프로시저의 코드 블록을 대체해요. 예시를 볼게요.

program CmodDemo;
{$Linklib c}
Const P : PChar = 'This is fun !';
Function strlen (P : PChar) : Longint; cdecl; external;
begin
  WriteLn ('Length of (',p,') : ',strlen(p))
end.

참고: 외부 함수 선언의 매개변수는 오브젝트 파일 안의 선언과 정확히 일치해야 해요.

external 수정자 뒤에 문자열 상수가 오면, 함수가 들어 있는 라이브러리를 지정할 수 있어요.

external 'lname';

이것은 함수가 "lname" 라이브러리에 있다는 뜻이에요. 컴파일러는 이 라이브러리를 자동으로 프로그램에 링크해요.

라이브러리 안의 함수 이름도 지정할 수 있어요.

external 'lname' name 'Fname';

이것은 함수가 "lname" 라이브러리에 있지만 이름은 "Fname"이라는 뜻이에요. 컴파일러는 라이브러리를 프로그램에 자동으로 링크하고, 함수에 올바른 이름을 사용해요.

Windows와 OS/2에서는 다음 형태도 사용할 수 있어요.

external 'lname' Index Ind;

이것은 함수가 "lname" 라이브러리에 있지만 인덱스는 Ind라는 뜻이에요. 컴파일러는 라이브러리를 프로그램에 자동으로 링크하고, 함수에 올바른 인덱스를 사용해요.

마지막으로 external 지시어는 함수의 외부 이름을 지정하는 데도 사용할 수 있어요.

external name 'Fname';
{$L myfunc.o}

이것은 함수의 이름이 "Fname"이라는 뜻이에요. 올바른 라이브러리나 오브젝트 파일(여기서는 myfunc.o)을 여전히 링크해야 하며, 그래야 "Fname" 함수가 링크 단계에 실제로 포함돼요.

더 알아보기