2011-12-08 11 views
6

Chcę stworzyć interfejs, ale czegoś nie wiem.Czy OleVariant jest użyteczny dla parametru out w procedurze DLL?

Czy OleVariant jest "standardem" zawierającym "standardowy" ciąg znaków - do przekazania i zwrotu?

function Any(Input : OleVariant; out Output : OleVariant) : integer; stdcall; 

Kolejna strona to może .NET, C#, C++ lub Delphi.

Czy mogą one przywrócić wynik "ciąg" w OleVariant bez przepuszczenia wstępnie zdefiniowanego bufora rozmiaru dla wyniku?

+1

Użyj WideString do przekazywania zmiennych łańcuchowych i oszczędzaj sobie kłopotów. Spójrz [tutaj] (http://stackoverflow.com/questions/8414972/delphis-Sharemem-when-it-is-not-needed) dla niektórych dodatkowych wskaźników –

+1

OleVariant * nie * będzie zawierał "standardowy" ciąg znaków (jeśli standardowy ciąg jest łańcuchem Delphi). Kiedy przypisujesz ciąg do OleVariant, ciąg zostanie przekształcony w "WideString". –

Odpowiedz

11

Tak, OleVariant jest całkowicie bezpieczny. Zobaczysz, że jest on używany w jednostkach powiązanych z COM dystrybuowanych z Delphi, takich jak ActiveX, ComSvcs i MSXML. Standardowe urządzenia Windows API używają go, więc Ty też możesz.

Jeśli jednak zawsze oczekujesz napisu, powinieneś zamiast tego preferować WideString. Jest to odpowiednik typu Windows BSTR.

Powiązane problemy