在Delphi中调用对象属性

时间:2018-02-17 09:27:34

标签: delphi properties

我承认我不是德尔福专家,所以我需要一些建议。 我有一个带有此定义的预构建类

  TS7Helper = class
  private
    function GetInt(pval: pointer): smallint;
    procedure SetInt(pval: pointer; const Value: smallint);
    function GetWord(pval: pointer): word;
    procedure SetWord(pval: pointer; const Value: word);
    function GetDInt(pval: pointer): longint;
    procedure SetDInt(pval: pointer; const Value: longint);
    function GetDWord(pval: pointer): longword;
    procedure SetDWord(pval: pointer; const Value: longword);
    function GetDateTime(pval: pointer): TDateTime;
    procedure SetDateTime(pval: pointer; const Value: TDateTime);
    function GetReal(pval: pointer): single;
    procedure SetReal(pval: pointer; const Value: single);
    function GetBit(pval: pointer; BitIndex: integer): boolean;
    procedure SetBit(pval: pointer; BitIndex: integer; const Value: boolean);
  public
    procedure Reverse(pval : pointer; const S7Type : TS7Type);
    property ValBit[pval : pointer; BitIndex : integer] : boolean read GetBit write SetBit;
    property ValInt[pval : pointer] : smallint read GetInt write SetInt;
    property ValDInt[pval : pointer] : longint read GetDInt write SetDInt;
    property ValWord[pval : pointer] : word read GetWord write SetWord;
    property ValDWord[pval : pointer] : longword read GetDWord write SetDWord;
    property ValReal[pval : pointer] : single read GetReal write SetReal;
    property ValDateTime[pval : pointer] : TDateTime read GetDateTime write SetDateTime;
  end;

Var
  S7 : TS7Helper;

procedure TS7Helper.SetInt(pval: pointer; const Value: smallint);
Var
  BW : packed array[0..1] of byte absolute value;
begin
  pbyte(NativeInt(pval)+1)^:=BW[0];
  pbyte(pval)^:=BW[1];
end;

(我剪了一些代码,所以不要查找实现子句等等......帮助器类正在编译好......)

简单地说,我想调用SetInt属性(如类文档中所述)......但是下面的代码给出了一个错误"无法访问私有符号TS7Helper.SetInt"。

S7.SetInt(@MySnap7Array[i * 2], gaPlcDataScrittura[i]);

我做错了什么?

2 个答案:

答案 0 :(得分:2)

SetInt和GetInt是ValInt属性的getter和setter,如ValInt定义中所述。所以你应该像使用S7.ValInt一样使用

S7.ValInt[@MySnap7Array[i * 2]] := gaPlcDataScrittura[i];

答案 1 :(得分:0)

在Delphi中,

  

// This code only runs on the server Meteor.publish("company", function companyPublication(){ if (this.userId) { return Company.find({userId: this.userId},{limit:1, reactive: false}); } else { return this.ready(); } }); 在声明其类的unitprogram之外是不可见的。

注意:"程序"是指以program关键字(通常是.dpr文件)开头的文件,而不是整个项目。

所以你只能从声明TS7Helper.SetInt类的同一个单位调用TS7Helper

否则,@ DmLam private member是解决问题的正确方法。