Frage

Ich möchte einige Funktionen eines internen Objekt als DLL belichten - aber diese Funktionalität nutzt Varianten. Aber ich muß wissen: Ich habe eine Funktion mit Variant-Parametern exportieren und / oder Rücklauf - oder besser ist, zu einer String-Darstellung nur gehen?

Was ist besser, aus sprachunabhängig POV (der Verbraucher nicht mit Delphi gemacht - aber alle werden in Windows ausgeführt wird)

?
War es hilfreich?

Lösung

könnten Sie verwenden OleVariant, die die Variante Werttyp ist, die von COM verwendet wird. Achten Sie darauf, nicht als Funktionsergebnis als stdcall und komplexe Ergebnistypen zurückkehren kann leicht zu Problemen führen.

Ein einfaches Beispiel     Bibliothek 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;

Wie es aus C # verbraucht werden:

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);
}

Andere Tipps

Soweit ich weiß, gibt es keine Probleme mit Variant Variablentyp in anderen Sprachen zu arbeiten. Aber es wird groß sein, wenn Sie die gleichen Funktionen für unterschiedliche Variablentypen exportieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top