[DUG] Returning a WideString in an Invoke Param
Phil Middlemiss
phil at tumonz.co.nz
Tue Jul 18 13:27:39 NZST 2006
I have avoided that one because if I set pbstrVal^ then I'm writing
directly into memory which should just end up causing an access violation.
Todd Martin wrote:
> 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
>
>
>
-------------- 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/32a50344/phil.vcf
More information about the Delphi
mailing list