Domanda

voglio esporre alcune funzionalità di un oggetto interno come DLL - ma tale funzionalità utilizza in varianti. Ma ho bisogno di sapere: posso esportare una funzione con parametri Variant e / o ritorno - o è meglio andare a una rappresentazione di stringa di sola?

Cosa c'è di meglio, da POV indipendente dal linguaggio (il consumatore non è fatto con Delphi - ma tutto verrà eseguito in Windows)

?
È stato utile?

Soluzione

Si potrebbe utilizzare OleVariant, che è il tipo di valore variante che viene utilizzato da COM. Assicurarsi di non restituirlo a seguito funzione stdcall e tipi di risultati complessi può facilmente portare a problemi.

Un semplice esempio     biblioteca DelphiLib;

uses
  SysUtils,
  DateUtils,
  Variants;

procedure GetVariant(aValueKind : Integer; out aValue : OleVariant); stdcall; export;
var
  doubleValue : Double;
begin
  case aValueKind of
    1: aValue := 12345;
    2:
    begin
      doubleValue := 13984.2222222222;
      aValue := doubleValue;
    end;
    3: aValue := EncodeDateTime(2009, 11, 3, 15, 30, 21, 40);
    4: aValue := WideString('Hello');
  else
    aValue := Null();
  end;
end;

exports
  GetVariant;

Come potrebbe essere consumato da C #:

public enum ValueKind : int
{
   Null = 0,
   Int32 = 1,
   Double = 2,
   DateTime = 3,
   String = 4
}

[DllImport("YourDelphiLib",
           EntryPoint = "GetVariant")]
static extern void GetDelphiVariant(ValueKind valueKind, out Object value);

static void Main()
{
   Object delphiInt, delphiDouble, delphiDate, delphiString;

   GetDelphiVariant(ValueKind.Int32, out delphiInt);
   GetDelphiVariant(ValueKind.Double, out delphiDouble);
   GetDelphiVariant(ValueKind.DateTime, out delphiDate);
   GetDelphiVariant(ValueKind.String, out delphiString);
}

Altri suggerimenti

Per quanto ne so non ci sono problemi a lavorare con Variant tipo di variabile in altre lingue. Ma sarà grande se si esporta le stesse funzioni per i diversi tipi di variabili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top