我承认我不是德尔福专家,所以我需要一些建议。 我有一个带有此定义的预构建类
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]);
我做错了什么?
答案 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(); } });
在声明其类的unit
或program
之外是不可见的。
注意:"程序"是指以program
关键字(通常是.dpr文件)开头的文件,而不是整个项目。
所以你只能从声明TS7Helper.SetInt
类的同一个单位调用TS7Helper
。
否则,@ DmLam private member是解决问题的正确方法。