[DUG] Returning a WideString in an Invoke Param

Todd Martin toddm at kol.co.nz
Tue Jul 18 12:45:05 NZST 2006


Okay. How about setting the "value" of the widestring pointer.

Parameters.rgvarg[1].pbstrVal^ := layermanagerid;

----- 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 12:30 PM
Subject: Re: [DUG] Returning a WideString in an Invoke Param


> 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
>>
>>
>>
>


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


> _______________________________________________
> 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