2015-08-31 1 views
2

Pourquoi ne pas compiler? Cela semble simple mais je ne comprends pas ... le tableau de chaîne est-il le problème? L'erreur est:Compléter SelectDirectory troisième surcharge avec Delphi 10

[dcc32 Error] Unit1.pas(94): E2250 There is no overloaded version of 'SelectDirectory' that can be called with these arguments. 

Voici le code:

{ 
function SelectDirectory(const StartDirectory: string; out Directories: TArray<string>; Options: TSelectDirFileDlgOpts = []; 
    const Title: string = ''; const FolderNameLabel: string = ''; const OkButtonLabel: string = ''): Boolean; overload; 
} 

procedure TForm2.Browse1Click(Sender: TObject); 
var 
    iStartFolder: string; 
    iDirectories: Array of string; 
    iSelectedFolder: string; 
begin 
    iStartFolder := DesktopFolder; 
    if SelectDirectory(iStartFolder, iDirectories, 
    [sdHidePinnedPlaces, sdNoDereferenceLinks, sdForceShowHidden, 
    sdAllowMultiselect], 'Select Folder', 'Folder', 'Ok') then 
    ShowMessage(iDirectories[0]); 
end; 
+0

Ok Jason ... tu avais raison. Merci – Bill

+3

Parce que 'TArray ' n'est pas le même type que 'Array of string'. –

Répondre

7

Le deuxième paramètre du troisième SelectDirectory() surcharge est un paramètre out, vous devez donc fournir une variable qui est du même type que le paramètre . Vous essayez de transmettre une variable array of string où une variable System.TArray<String> est attendue, d'où l'erreur. Utilisez ceci:

procedure TForm2.Browse1Click(Sender: TObject); 
var 
    iStartFolder: string; 
    iDirectories: TArray<string>; 
    iSelectedFolder: string; 
begin 
    iStartFolder := DesktopFolder; 
    if SelectDirectory(iStartFolder, iDirectories, 
    [sdHidePinnedPlaces, sdNoDereferenceLinks, sdForceShowHidden, 
    sdAllowMultiselect], 'Select Folder', 'Folder', 'Ok') then 
    ShowMessage(iDirectories[0]); 
end; 

Bien que TArray<String> est juste un alias pour array of string, ils sont effectivement différents types lorsqu'ils sont utilisés avec out paramètres.

+1

Pourquoi le vote à la baisse? Il est presque impossible d'afficher quoi que ce soit ici sans que quelqu'un soit négatif plutôt que positif ... – Bill

+0

@Bill: D'abord, pourquoi demandez-vous à Remy? Il n'a clairement pas baissé le ton, ou il n'aurait pas répondu. Deuxièmement, je n'ai pas downvote, mais c'est peut-être parce que vous avez posté une déclaration de fonction qui vous demandait de fournir un TArray et un code qui faisait quelque chose de totalement différent (utilisez un tableau array of string); une lecture simple (et prudente) de la déclaration de fonction aurait dû répondre à votre question. Delphi est fortement typé. 'TArray ' et 'array of string' ne sont pas les mêmes - le premier est un tableau générique de chaîne, le second un tableau dynamique de chaîne. –

+2

@KenWhite: 'TArray ' est juste un alias pour 'array of String':' type TArray = tableau de T; '. Mais, dans ce cas, où un paramètre 'out' est impliqué, ils sont traités différemment. –