debug в VBA

0 голосов
спросил 02 Март, 10 от d3n40 (840 баллов) в категории Программные продукты Esri
    Можно как-то просматривать поля объектов в Watch? Объект добавляется в вотч, но при его раскрытии пишется <No Variables>.

image
    

5 Ответы

0 голосов
ответил 02 Март, 10 от pooperec (10,820 баллов)
А pPoint(0).X, pPoint(0).Y не? Просто что Вы хотите увидеть в качестве переменных у интерфейса я хз....
0 голосов
ответил 02 Март, 10 от d3n40 (840 баллов)
А pPoint(0).X, pPoint(0).Y не? Просто что Вы хотите увидеть в качестве переменных у интерфейса я хз....

    
Вы меня немного не поняли. Можно ли как-то просмотреть в watch объект на который ссылается интерфейс. Чтоб в watch нажать на "+" и раскрылись все значения полей объекта. Т.е. что бы можно было просматривать весь объект сразу, а не отдельные его поля (как если добавить в watch pPoint(0).X).
    
    
0 голосов
ответил 02 Март, 10 от pooperec (10,820 баллов)
> Вы меня немного не поняли.
Вы меня тоже. IPoint - это интерфейс, у него нет полей (public/published переменных) как таковых, а только методы. Опрашивая (выполняя) метод интерфейса, ватчер получает возращаяемое значение, и результат выполнения. И если у вас для интерфейса не вызвана реализация, а компилятор вызовет метод этого интерфейса, Вы получите ошибку (мою любимую) "Разрушительный сбой".

Если быть кратким - нет нельзя (CodeGear RAD Studio Delphi 2007), либо я об этом ничего не знаю.
0 голосов
ответил 02 Март, 10 от d3n40 (840 баллов)
Т.е. если я пишу:
    Dim p As IPoint
    Set p = New Point
Создается объект класса Point, но доступ к его полям можно получить только через методы интерфейса который на его ссылается?
    
    
0 голосов
ответил 03 Март, 10 от pooperec (10,820 баллов)
Так построенно %большое число в процентах% ArcObject`s.
http://www.interface.ru/fset.asp?Url=/borland/decom_1.htm

>Т.е. если я пишу:
>    Dim p As IPoint
>    Set p = New Point

Вы обьявляете что в переменной p, будет храниться указатель на интерфейс IPoint, который реализуеться классом Point;

Сам интерфейс IPoint выглядит так:
 IPoint = interface(IGeometry)
    ['{1B077915-38C5-11D0-92D2-00805F7C28B0}']
    procedure QueryCoords(out X: Double; out Y: Double); safecall;
    procedure PutCoords(X: Double; Y: Double); safecall;
    function Get_X: Double; safecall;
    procedure Set_X(X: Double); safecall;
    function Get_Y: Double; safecall;
    procedure Set_Y(Y: Double); safecall;
    function Get_Z: Double; safecall;
    procedure Set_Z(Z: Double); safecall;
    function Get_M: Double; safecall;
    procedure Set_M(M: Double); safecall;
    function Get_ID: Integer; safecall;
    procedure Set_ID(pointID: Integer); safecall;
    function Get_VertexAttribute(attributeType: esriGeometryAttributes): Double; safecall;
    procedure Set_VertexAttribute(attributeType: esriGeometryAttributes; attributeValue: Double); safecall;
    procedure ConstrainDistance(constraintRadius: Double; const anchor: IPoint); safecall;
    procedure ConstrainAngle(constraintAngle: Double; const anchor: IPoint; allowOpposite: WordBool); safecall;
    function Compare(const otherPoint: IPoint): SYSINT; safecall;
    property X: Double read Get_X write Set_X;
    property Y: Double read Get_Y write Set_Y;
    property Z: Double read Get_Z write Set_Z;
    property M: Double read Get_M write Set_M;
    property ID: Integer read Get_ID write Set_ID;
    property VertexAttribute[attributeType: esriGeometryAttributes]: Double read Get_VertexAttribute write Set_VertexAttribute;
  end;

Где вы видите получение переменных НЕ через методы?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...