2013-10-01 2 views
0

다음은 구문이 올바로 보이고 잘 컴파일됩니다.인터페이스가없는 함수

unit MyAPI; 

interface 
// function Min(X, Y: Integer): Integer; 
// function Max(X, Y: Integer): Integer; 

implementation 

function Min(X, Y: Integer): Integer; 
begin 
    if X < Y then Min := X else Min := Y; 
end; 

function Max(X, Y: Integer): Integer; 
begin 
    if X > Y then Max := X else Max := Y; 
end; 

end. 

저는 50 가지 이상의 기능, 일반적으로 건물중인 동적 라이브러리의 facade 기능에 대해 동일한 작업을 수행하고 싶습니다. 이 50 개의 함수는 모두 작은 몸체를 가지고 있으며 내부 코드를 호출 한 다음 출력 DLL을 통해 C 스타일 호출에 대한 데이터를 변환합니다.

이런 이유로 나는 인터페이스 부분을 작성하는 것이 경제적이되고 싶습니다.

unit MyAPI; 

interface 
uses Optimizer; 

implementation 

function Min(X, Y: Integer): Integer; 
var 
    optimizer: TOptimizer; 
begin 
    optimizer := TOptimizer.Create; 
    Min := optimizer.Min(X,Y); 
end; stdcall; 

... 

end. 

괜찮습니까? 다른 옵션은 무엇입니까?

+5

그렇다면 인터페이스 코드를 작성하고 싶지 않습니까? 괜찮습니다. 함수가 정의 된 유닛의 외부에서 보이지 않을 것입니다. –

+0

'Min'과'Max'는 이미'Math' 유닛에서 선언되었습니다. RTL 유틸리티의 중복을 피하십시오. –

+1

@LURD - 그 개념을 보여주는 예라고 생각합니다. –

답변

3

두 번째 예제에서 명백한 메모리 누수 외에 (변수 optimizer의 파괴가 없음), 주로 묻는 것을 기반으로하면 인터페이스 섹션에 함수를 선언하는 것과 그렇지 않은 것 사이에 차이가 있습니다.

인터페이스 섹션에서 선언되지 않은 함수는 동일한 유닛에서만 사용할 수 있으며 해당 유닛을 사용하는 다른 유닛에서는 호출 할 수 없습니다.

인터페이스 섹션에서 선언 한 함수를 장치 외부에서 사용할 수 있습니다.

줄을 절약하는 것이 아니라 두 옵션이 모두 의미가 다르며 기능을 외부 세계에 숨길 지 여부를 결정합니다.

+1

질문의 모든 함수는 값을 반환합니다.확장 된 구문에서 'Result'를 사용하거나 함수 이름을 사용하여 암시 적 함수 반환 변수에 할당 할 수 있습니다. –

+0

죄송합니다. Min이 함수의 이름 인 것을 보지 못했습니다 ... 편집 – Qsebas

+0

답변 해 주셔서 감사합니다. 나는 왜 메모리 누수가 있는지 보지 못했다. 필자는 분명히 Delphi 전문가는 아니지만 스택에 메모리를 할당하는 C++ 개념과 유사합니다 (Min 함수가 끝날 때 자동으로 개체가 종료 됨). 이 예제에서 Create 키워드를 사용하는 방법을 살펴보십시오. http://www.delphibasics.co.uk/RTL.asp?Name=Constructor 아니면 내가 틀렸어? –

3

interfaceimplementation 섹션의 의미는 매우 다릅니다. 요컨대 - 구현은 실제 코드이며 실행을 위해 필요한 모든 것이 필요합니다. 분명히 구현되지 않은 코드는 작동하지 않습니다.

interface 섹션은 다른 장치에서보고 사용할 수있는 부분입니다. 전체 프로그램이 단일 장치 인 경우 interface 정의가 절대적으로 필요하지 않습니다.

장치 외부에서 코드를 사용해야하는 경우 (동적 라이브러리의 기능을 암시하는 것처럼) interface 부분에 해당 기능을 나열해야합니다.

개체 지향 개념을 알고있는 경우이 개념은 개인/공용 정의와 유사합니다. interface에 선언 된 항목은 모두 공개되며 다른 모든 항목은 비공개입니다. interface/implementation 분리는 어느 정도 가난한 사람의 캡슐화입니다.

관련 문제