Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [DELPHI] Procedura a parametri variabili .NET

    Ciao a tutti, ho visto sulla documentazione il codice che permette di realizzare una procedura che accetta un numero di parametri variabile.
    Il problema che sto realizzando una applicazione .NET e ho letto che il metodo utilizzato per il controllo dei tipi di variabile che vengono passati alla procedura è supportato solo per applicazioni win32. Parlo di questo :
    codice:
    procedure MyWriteLn(const Args: array of const);
      var I: Integer;
      var Result : String;
    
      begin
        Result := '';
      for I := 0 to High(Args) do
         with Args[I] do
           case VType of
           
                vtInteger:  Result := Result + IntToStr(VInteger);
                vtBoolean:  Result := Result + BoolToStr(VBoolean);
                vtChar:     Result := Result + VChar;
                vtExtended: Result := Result + FloatToStr(VExtended^);
                vtString:   Result := Result + VString^;
                vtPChar:    Result := Result + VPChar;
                vtObject:   Result := Result + VObject.ClassName;
                vtClass:    Result := Result + VClass.ClassName;
                vtAnsiString:  Result := Result + string(VAnsiString);
                vtCurrency:    Result := Result + CurrToStr(VCurrency^);
                vtVariant:     Result := Result + string(VVariant^);
                vtInt64:       Result := Result + IntToStr(VInt64^);
      end;
    E questo non funziona, qualcuno sa darmi qualche delucidazione su come posso fare per applicazioni .NET.

    Grazie
    ...NO ONE IS INNOCENT ANYMORE...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Dire che "non funziona" è sempre molto vago: qual è l'errore che ottieni precisamente?

    Io ho provato a dichiarare la procedura esattamente come l'hai definita tu e non ho avuto errori di compilazione, mentre per quanto riguarda il corpo implementativo vero e proprio della procedura, stai facendo uso di proprietà specifiche dei tipi Variant che in ambiente .NET non sono supportati.

    Puoi tranquillamente usare le classiche funzioni applicate ai vettori come Length per determinarne la lunghezza (il numero di elementi variabile, in questo caso) ed eseguire un ciclo per tutti gli oggetti inseriti usando la nuova sintassi for...in di Delphi 2005.

    Un breve spezzone di codice per esemplificare:

    codice:
    procedure TForm1.MyWriteLn(const Args: array of const);
    var
      ArrayObject: TObject;
    begin
      for ArrayObject in Args do
        ShowMessage(ArrayObject.ToString);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      MyWriteLn([0, 1, 2, 3]);
    end;
    Uno dei principali vantaggi di sviluppare in Delphi, infatti, è che in ambito .NET si possono continuare ad usare le funzioni e gli approcci già esistenti su Win32, tranne alcuni casi particolari come appunto i Variant e l'aritmetica dei puntatori.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ok! Con la tua funzione sono riuscito a cavarmela. Grazie!
    ...NO ONE IS INNOCENT ANYMORE...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.