Search code examples
delphicomrdp

Setting COM (RDPEncomAPI) property in Delphi


I've used Delphi for some time, but I am trying some COM programming and having trouble. I apologize if this is a NewBie issue, but after searching an trying lots of things I have not been able to get or set the properties of an RDPEncom RDPSession object. The code (including several naive attemps) is below. If I remove the line attempting to read properties, remaining code works fine.

How can I get and Set the PortID property of RDPSession.Properties ?

uses rdpencomapi_TLB;  // from JWAPI

...

myRDPSession := CoRDPSession.Create();
if VarIsNull(myRDPSession) then
begin
  application.MessageBox('MsRdpSession creation failed.', 'Error');
  Result := False;
  Exit;
end;
try
  didShare := myRDPSession.Open;
except
  ShowMessage('Unable to share desktop !');
  Exit;
end;
theProperty := 'PortID';
ActiveXProp := myRDPSession.Properties;
//lValues := ActiveXProp.Property_(theProperty); // method not supported
//lValues := ActiveXProp.Property(theProperty); // member not found
myRDPSession.Properties.GetProperty(lValues, myRDPSession.Properties.Property, theProperty);
{
 ALL RETURN INVALID NUMBER OF PARAMETERS..
    ActiveXProp.GetProperty(lValues, ActiveXProp.Property, 'PortID');
    ActiveXProp.Property.GetProperty(ActiveXProp.Property, lValues, 'PortID');
    ActiveXProp.Property.GetProperty(lValues, ActiveXProp, 'PortID');
    ActiveXProp.Property.Get_Prop_('PortID', ActiveXProp);
    ActiveXProp.Property.SetProperty('PortID', ActiveXProp);
    ActiveXProp.Property.Set_Prop_('PortID', ActiveXProp);
}
ActiveXInvite := myRDPSession.Invitations.CreateInvitation('RemoteSupport', 'WePresent', '12345', 75);

...

Solution

  • Ken,

    Your comment put me onto something.. I regenerated the TLB file from my own machine and found it did have a property that was not in the TLB I used originally (from Jedi Project). This one has a single Property called 'Property' that allowed me to do what I needed. Basically I was missing the COM interface point. I got it to work after updating the TLB this way (with no error checking yet):

    // get properties interface
    myRDPSessionProp := myRDPSession.Properties;
    // set listening port
    myRDPSessionProp.Property['PortID'] := 59000;
    // set color depth
    myRDPSession.colorDepth := 8;
    didShare := myRDPSession.Open;