[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