Как мне (или если я не могу) использовать варианты в простых библиотеках DLL?

StackOverflow https://stackoverflow.com/questions/1667281

Вопрос

Я хочу предоставить некоторую функциональность внутреннего объекта в виде DLL - но эта функциональность использует variants .Но мне нужно знать:Я могу экспортировать функцию с параметрами Variant и / или return - или лучше перейти к представлению только в виде строки?

Что лучше, от не зависящего от языка POV (пользователь создан не на Delphi, но все будет работать в Windows)?

Это было полезно?

Решение

Вы могли бы использовать OleVariant, который является типом значения variant, используемым COM.Убедитесь, что не возвращаете его как результат функции, поскольку stdcall и сложные типы результатов могут легко привести к проблемам.

Простой пример библиотека 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;

Как это можно было бы использовать из 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);
}

Другие советы

Насколько я знаю, нет никаких проблем с работой с типом переменной Variant на других языках.Но было бы здорово, если бы вы экспортировали одни и те же функции для разных типов переменных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top