在Delphi中设置COM(RDPEncomAPI)属性

时间:2015-06-04 16:44:21

标签: delphi com rdp

我已经使用Delphi一段时间了,但我正在尝试一些COM编程并遇到麻烦。我很抱歉,如果这是一个NewBie问题,但在搜索了很多我无法获得的东西或设置RDPEncom RDPSession对象的属性之后。代码(包括几个天真的尝试)如下。如果我删除试图读取属性的行,剩下的代码工作正常。

如何获取和设置RDPSession.Properties的PortID属性?

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

...

1 个答案:

答案 0 :(得分:3)

您的评论让我有所了解......我从我自己的机器重新生成了TLB文件,发现它确实有一个属性不在我最初使用的TLB中(来自Jedi Project)。这个有一个名为' Property'这让我可以做我需要的事情。基本上我错过了COM接口点。我用这种方式更新TLB后就开始工作了(还没有错误检查):

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