[DUG] Returning a WideString in an Invoke Param

Todd Martin toddm at kol.co.nz
Tue Jul 18 12:24:32 NZST 2006


Actually I've spotted an error in your code....and my example.

rgvarg is of type PVariantArgList, so you need to dereference the pointer to 
the variant list and then index the array.

Like so

funtion getParameter(Params : TDispParams; AIndex : Integer) : OleVariant;
begin
  Result:= Params.rgvarg^[AIndex ];
end;

----- Original Message ----- 
From: "Phil Middlemiss" <phil at tumonz.co.nz>
To: "NZ Borland Developers Group - Delphi List" <delphi at ns3.123.co.nz>
Sent: Tuesday, July 18, 2006 11:59 AM
Subject: Re: [DUG] Returning a WideString in an Invoke Param


> No, it's not in a DLL. It's the automatically generated events object
> that the Automation wizard produces when creating an automation server
> with events. It's for use in the client app that will connect to the
> automation server in order to respond to the events that the automation
> server fires.
>
> Perhaps I need to use OleVariants. Infact, the actual parameters may be
> OleVariants instead of bstrVal types.
>
> Phil.
>
> Rohit Gupta wrote:
>> Is this code in a DLL ?  If so then you can not transfer ansistrings 
>> unless you
>> use a sharememory kludge.
>>
>> Last time I chose to use shortstrings to get around this.  That worked 
>> fine
>> except in some instances on some PCs, the exceptions would not work...
>> When I thought about it, the exception object itself uses ansistring.  So
>> Borlands staement is not true.... if the DLL can possible raise an 
>> exception,
>> it uses ansistring and you need to use sharemem.
>>
>> Date sent: Tue, 18 Jul 2006 11:13:50 +1200
>> From: Phil Middlemiss <phil at tumonz.co.nz>
>> Organization: MTS Ltd
>> To: NZ Borland Developers Group - Delphi List <delphi at ns3.123.co.nz>
>> Subject: [DUG] Returning a WideString in an Invoke Param
>> Send reply to: NZ Borland Developers Group - Delphi List 
>> <delphi at ns3.123.co.nz>
>> <mailto:delphi-request at ns3.123.co.nz?subject=unsubscribe>
>> <mailto:delphi-request at ns3.123.co.nz?subject=subscribe>
>>
>> Hi all,
>>
>> I have an automation object with events. One of the events has a couple
>> of VAR parameters which I'm not quite sure how to handle. Here is the
>> code that is NOT working:
>>
>> procedure TT3SDKEvents.DoInvoke(Sender : TObject; DispID: Integer; const
>> IID: TGUID;
>>   LocaleID: Integer; Flags: Word; var Params: TDispParams; VarResult,
>> ExcepInfo,
>>   ArgErr: Pointer);
>>     case DispID of
>>
>>     ...
>>
>>     4: { OnIdentify }
>>       if assigned(FOnIdentify) then
>>         begin
>>         //initialise the values
>>         layermanagerid :=  WideCharToString(Params.rgvarg[1].bStrVal);
>>         appname := WideCharToString(Params.rgvarg[0].bstrVal);
>>         if assigned(FOnIdentify) then
>>           FOnIdentify(layermanagerid, appname);
>>         Params.rgvarg[1].bstrVal := PWideChar(layermanagerid);
>>         Params.rgvarg[0].bstrVal := PWideChar(appname);
>>         end;
>>     end;
>> end;
>>
>> The above code just ends up returning an empty string - I've checked to
>> make sure that the call to FOnIdentify is indeed returning values.
>> So the question is: how should I be returning a widestring in the
>> TDispParams?
>>
>> Cheers,
>> Phil.
>> Regards
>>
>> Rohit
>>
>> ======================================================================
>> CFL - Computer Fanatics Ltd.  21 Barry's Point Road, AKL, New Zealand
>> PH    (649) 489-2280
>> FX    (649) 489-2290
>> email rohit at cfl.co.nz  or  r.gupta at xtra.co.nz
>> ======================================================================
>>
>>
>> _______________________________________________
>> Delphi mailing list
>> Delphi at ns3.123.co.nz
>> http://ns3.123.co.nz/mailman/listinfo/delphi
>>
>>
>>
>>
>


--------------------------------------------------------------------------------


> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
>


--------------------------------------------------------------------------------


No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.1/389 - Release Date: 14/07/2006



-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.394 / Virus Database: 268.10.1/389 - Release Date: 14/07/2006



More information about the Delphi mailing list