[DUG] Returning a WideString in an Invoke Param

Phil Middlemiss phil at tumonz.co.nz
Tue Jul 18 12:30:03 NZST 2006


Yes, I checked after my initial post, and it is a pbstrVal.

I can read the value fine. It's writing the value that seems to be the 
problem. The Params parameter is a Var parameter so that you can return 
values in it if you need to. I tried just pointing the pbstrVal to a new 
WideString, but it still ends up an empty string by the time it gets 
back to the automation server, so

        Parameters.rgvarg[1].pbstrVal := @layermanagerid; 
//layermangerid is a WideString

doesn't work. I think, as Conor says, I need to construct an OleVariant 
to return, but the Parameters.rgvarg[1] still needs to be a pbstrVal. 
Not quite sure how to fit the bits together.

Phil.

Todd Martin wrote:
> Have you checked the TVarType of parameter 1? Is it actually a bStrVal 
> and not pbstrVal?
>
> For pbstrVal just dereference the pointer to an ordinary string 
> variable. The conversion is automatic.
>
> var
>  myValue : string;
> begin
>   myValue := Params.rgvarg[1].pbstrVal^;
> 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:13 AM
> Subject: [DUG] Returning a WideString in an Invoke Param
>
>
>> 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.
>>
>
>
> -------------------------------------------------------------------------------- 
>
>
>
>> _______________________________________________
>> 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
>
>
>
-------------- 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/42254129/phil.vcf


More information about the Delphi mailing list