[DUG] Returning a WideString in an Invoke Param

Phil Middlemiss phil at tumonz.co.nz
Tue Jul 18 11:59:24 NZST 2006


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
>
>
>
>   
-------------- next part --------------
A non-text attachment was scrubbed...
Name: phil.vcf
Type: text/x-vcard
Size: 250 bytes
Desc: not available
Url : http://ns3.123.co.nz/pipermail/delphi/attachments/20060718/e8498055/phil.vcf


More information about the Delphi mailing list