2017-12-21 4 views
2

델파이에 문제가 있습니다. delphi에서 함수의 배열에 문자열 배열을 전달하는 방법

는이 같은 기능 썼다 :

function MyFunction(arr: array of AnsiString): Boolean; 
begin 
    //code here 
end; 

를 그리고 이렇게 직접 함수에 AnsiString의 배열을 통과 할 때 지금, 모든 것이 완벽하게 작동합니다 :

MyFunction(['one', 'two', 'three']); 

그러나 때 이 배열을 다음과 같이 저장하십시오.

var arr: array of AnsiString; 

procedure MyProcedure; 
begin 
    arr[0] := ['one', 'two', 'three']; 
    MyFunction(arr[0]); 
end; 

불일치 오류가 있습니다.

저는 델파이 초보자입니다. 그러나 이것은 정말로 혼란 스럽습니다.

+0

이 문서를 살펴 걸릴 수 있습니다 : http://rvelthuis.de/articles/articles-openarr.html – MartynA

+0

왜 AnsiString을 사용하고 있습니까? –

+0

@DavidHeffernan이 중요합니까? 문자열 배열의 경우 동일한 문제가 있습니다. –

답변

8

두 번째 예는 기능적으로 첫 번째 예와 동일하지 않습니다.

첫 번째 예는 괜찮습니다. 이 함수는 open array을 입력 매개 변수로 사용하며 해당 매개 변수에 문자열의 고정 배열을 직접 구성합니다. 모든 배열 유형을 열린 배열 매개 변수에 전달할 수 있습니다.

두 번째 예에서는 문자열의 dynamic array을 선언하지만 배열에 메모리를 할당하지 않고 첫 번째 요소 (단일 문자열 임)를 고정 배열을 가리 키려고합니다 문자열의. 그리고 배열이 예상되는 곳에서 그 요소 (다시 한번 단일 문자열)를 전달하려고합니다. 그래서 코드가 컴파일되지 않습니다.

보기 다음과 같습니다 싶은 프로 시저를 작성하는 올바른 방법 : 또는

procedure MyProcedure; 
var 
    arr: array of AnsiString; 
begin 
    SetLength(arr, 3); 
    arr[0] := 'one'; 
    arr[1] := 'two'; 
    arr[2] := 'three'; 
    MyFunction(arr); 
end; 

: 또는

procedure MyProcedure; 
var 
    arr: array of AnsiString; 
begin 
    arr := ['one', 'two', 'three']; 
    MyFunction(arr); 
end; 

:

type 
    TAnsiStringArray = array of AnsiString; 

procedure MyProcedure; 
var 
    arr: TAnsiStringArray; 
begin 
    arr := TAnsiStringArray.Create('one', 'two', 'three'); 
    MyFunction(arr); 
end; 
관련 문제