Okay. How about setting the "value" of the widestring pointer.
Parameters.rgvarg[1].pbstrVal^ := layermanagerid;
----- Original Message -----
From: "Phil Middlemiss" <[EMAIL PROTECTED]>
To: "NZ Borland Developers Group - Delphi List" <[email protected]>
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" <[EMAIL PROTECTED]>
To: "NZ Borland Developers Group - Delphi List" <[email protected]>
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
[email protected]
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
[email protected]
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
_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi