在Delphi中设置COM(RDPEncomAPI)属性

在Delphi中设置COM(RDPEncomAPI)属性,delphi,com,rdp,Delphi,Com,Rdp,我使用Delphi已经有一段时间了,但我正在尝试一些COM编程,遇到了一些问题。如果这是一个新手问题,我很抱歉,但是在搜索了一个尝试了很多东西之后,我无法获取或设置RDPEncom RDPSession对象的属性。下面是代码(包括几个简单的尝试)。如果我删除了试图读取属性的行,剩下的代码可以正常工作 如何获取和设置RDPSession.Properties的PortID属性? uses rdpencomapi_TLB; // from JWAPI ... myRDPSession := C

我使用Delphi已经有一段时间了,但我正在尝试一些COM编程,遇到了一些问题。如果这是一个新手问题,我很抱歉,但是在搜索了一个尝试了很多东西之后,我无法获取或设置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);

...

你的评论使我想起了一件事。。我从自己的机器重新生成了TLB文件,发现它确实有一个属性不在我最初使用的TLB中(来自绝地计划)。这个有一个叫做“属性”的属性,它允许我做我需要的事情。基本上我错过了COM接口点。在以这种方式更新TLB后,我使其工作(尚未进行错误检查):


RDPSession.Properties
的定义是什么?(它是如何在IRDPSession的源代码中声明的?);无论哪种方式,它都是复数形式,这意味着有多个条目,这意味着通过内容进行某种形式的迭代。Ken:RDPSession.Properties在TLB单元中,它是一个IDispatch接口,没有定义实际属性,但具有Get_Property_uuu和Set_Property_uuu函数。根据MSDN,获取和设置是获取属性的唯一方法。。不幸的是,我没有能够得到或设置他们那样。
// get properties interface
myRDPSessionProp := myRDPSession.Properties;
// set listening port
myRDPSessionProp.Property['PortID'] := 59000;
// set color depth
myRDPSession.colorDepth := 8;
didShare := myRDPSession.Open;