c# - How do I handle var (or ref) parameters in COM Interop? -
i have stand-alone application exposes com interfaces/coclasses/enums, etc. 1 of interfaces exports following function:
procedure findtask(const taskid: widestring; var task: olevariant); safecall;
note: task
exposed coclass
.
note: task
[in, out]
so far, legacy application, written in delphi, had been able communicate stand-alone application. consider stand-alone app out-of-proc com server , consider legacy app client app.
as rewriting old delphi app (client) in c#, have use com interop in c# communicate application. therefore, made use of tlbimp.exe translate com interfaces c# interfaces.
that method translated following:
void findtask(string, taskid, ref object task);
how can call findtask , receive result of existent task signature?
i've tried this: (task coclass type)
sctask target = new cstask(); scheduler.findtask("a guid value", ref target);
but compiler yelled type, since there no overload class type (the translated method receives object)
could this, instead?
object target = new object(); scheduler.findtask("a guid value", ref target); sctask translated = (sctask) target;
how can call method expects var
(in, out)
variant *
, therefore translated object, have more precise type?
it rather looks me though parameter out parameter. don't appear attempting pass in. method appears returning different object. in c# ought be:
void findtask(string taskid, out object task);
you'd call this:
you'd need change type library specify out semantics.
if in/out you'd keep use of ref
, call method this:
object target = null; scheduler.findtask("a guid value", ref target); sctask translated = (sctask) target;
or possibly pass in actual object meaningful state if that's how designed work.
Comments
Post a Comment