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



begin:vcard
fn:Phil Middlemiss
n:Middlemiss;Phil
org:Vision Software, MTS Ltd
email;internet:[EMAIL PROTECTED]
title:Project Leader
tel;work:+64 7 3480001
tel;cell:+64 27 4592648
x-mozilla-html:TRUE
url:http://www.tumonz.co.nz
version:2.1
end:vcard

_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to