내부 개체의 일부 기능을 DLL로 공개하려고하지만이 기능은 변형을 사용합니다. 하지만 알아야 할 것은 Variant 매개 변수 및/또는 return을 사용하여 함수를 내보낼 수 있습니다. 아니면 문자열 만 표시하는 것이 더 낫습니다.간단한 DLL에서 어떻게 변형을 사용할 수 있습니까?
언어에 구애받지 않는 POV (소비자는 Delphi로 만들지 않았지만 모두 Windows에서 실행)에서 더 낫습니다.
내부 개체의 일부 기능을 DLL로 공개하려고하지만이 기능은 변형을 사용합니다. 하지만 알아야 할 것은 Variant 매개 변수 및/또는 return을 사용하여 함수를 내보낼 수 있습니다. 아니면 문자열 만 표시하는 것이 더 낫습니다.간단한 DLL에서 어떻게 변형을 사용할 수 있습니까?
언어에 구애받지 않는 POV (소비자는 Delphi로 만들지 않았지만 모두 Windows에서 실행)에서 더 낫습니다.
COM에서 사용하는 변형 값 형식 인 OleVariant를 사용할 수 있습니다. 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);
}
+1. 기본적으로 형식 라이브러리 임포트 단위에서 볼 수있는 데이터 형식 및 규칙을 고수하는 것은 좋은 생각입니다. – mghie
흠 ... 잘 됐네. 오늘 밤 한번 시도해 볼게. –
내가 아는 한 다른 언어로 Variant 변수 유형을 사용하는 데 문제가 없습니다. 그러나 다른 변수 유형에 대해 동일한 함수를 내보내는 것이 좋습니다.
델파이 heapmanager를 통해 할당 된 refcounted 유형이 있습니다. Olevariant 방법은 이것을 피할 수 있습니다. –
델파이 2010있다? 나는 VB6 주위에 델파이가 끝났다라고 생각했다 –
명백하게 당신은 너무나 잘 생각하지 않는다. :-) 델파이는 여전히 살아 있으며 2010 년은 몇 달 전에 출시되었으며 현재 개발중인 릴리스가 2 개 이상 (하나의 64 비트, 하나의 크로스 플랫폼)으로 출시되었습니다. 당신은 현재의 뉴스에 잘 따라해야합니다. –
Delphi가 살아 있고 발로 차 있습니다. Chris ;-) –