2015-06-04 2 views
1

Я использовал Delphi в течение некоторого времени, но я пытаюсь программировать COM и иметь проблемы. Я прошу прощения, если это проблема NewBie, но после поиска множества попыток, которые я не смог получить или установить свойства объекта RDPEncom RDPSession. Код (включая несколько наивных attemps) ниже. Если я удалю строку, пытающуюся читать свойства, оставшийся код работает нормально.Настройка свойства COM (RDPEncomAPI) в Delphi

Как я могу получить и установить свойство PortID 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); 

... 
+0

Какое определение «RDPSession.Properties»? (Как это объявлено в источнике IRDPSession?) Я бы предположил, что это либо «Вариант» (что, вероятно, означает массив Variant), либо какой-то набор; в любом случае, это множественное число, что означает, что существует более одной записи, что означает некоторую итерацию через содержимое. –

+0

Ken: RDPSession.Properties в блоке TLB это интерфейс IDispatch без определенных определенных свойств, но с функциями Get_Property_ и Set_Property_. Согласно MSDN Get и Set - это единственные способы получить доступ к свойствам. К сожалению, я не смог их установить или установить. –

ответ

3

Кен,

Ваш комментарий положил меня на что-то .. я регенерировать файл TLB из моей машины, и нашел, что это действительно имеет свойство, которое не было в TLB я использовал первоначально (от джедаев Проект). У этого есть одно свойство, называемое «Имущество», которое позволило мне делать то, что мне было нужно. В основном мне не хватало точки интерфейса COM. Я получил его для работы после обновления TLB таким образом (без проверки ошибок):

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

Дэвид, вы должны отметить свой собственный ответ, как принято. –

 Смежные вопросы

  • Нет связанных вопросов^_^