2011-12-08 28 views
6

Tôi muốn tạo một giao diện, nhưng tôi không biết điều gì đó.Có phải OleVariant có thể sử dụng cho tham số ngoài trong DLL proc không?

Có phải là OleVariant "tiêu chuẩn" để chứa chuỗi "chuẩn" - để chuyển và trả lại không?

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

Mặt khác có thể là .NET, C# hoặc C++ hoặc Delphi.

Vì vậy, họ có thể trả về một số kết quả "chuỗi" trong OleVariant mà không có tôi vượt qua một bộ đệm có kích thước được xác định trước cho kết quả?

+1

Sử dụng WideString để truyền các biến chuỗi và tự khắc phục sự cố. Có một cái nhìn [ở đây] (http://stackoverflow.com/questions/8414972/delphis-sharemem-when-it-is-not-needed) cho một số con trỏ bổ sung –

+1

OleVariant sẽ * không * chứa một chuỗi "chuẩn" (nếu chuỗi chuẩn là chuỗi Delphi). Khi bạn gán một chuỗi cho một OleVariant chuỗi sẽ được chuyển đổi thành một "WideString". –

Trả lời

11

Có, OleVariant hoàn toàn an toàn. Bạn sẽ thấy nó được sử dụng trong các đơn vị liên quan đến COM được phân phối với Delphi, chẳng hạn như ActiveX, ComSvcs và MSXML. Các đơn vị API chuẩn của Windows sử dụng nó, vì vậy bạn cũng có thể sử dụng nó.

Nếu bạn luôn mong đợi một chuỗi, thì bạn nên chọn WideString thay thế. Nó tương đương với loại Windows BSTR.

Các vấn đề liên quan