帮助更多需要帮助的人,我等待着您的帮助!编写DLL时多个unit能调用全局变量吗? ( 积分: 50 )

  • 主题发起人 主题发起人 jensgn
  • 开始时间 开始时间
J

jensgn

Unregistered / Unconfirmed
GUEST, unregistred user!
如:<br>unit1.pas<br> &nbsp;public<br> &nbsp; &nbsp;tempstr: string;<br><br>在 unit2.pas 里怎么调用unit1.pas里的tempstr: string????<br>-----------------------------------------------------------<br>朋友或许我的短讯打扰了您,希望您先不要生气,把问题看完了杀我都可以.<br>帮助更多需要帮助的人,我等待着您的帮助!<br>---------------------------------------------------------
 
如:<br>unit1.pas<br> &nbsp;public<br> &nbsp; &nbsp;tempstr: string;<br><br>在 unit2.pas 里怎么调用unit1.pas里的tempstr: string????<br>-----------------------------------------------------------<br>朋友或许我的短讯打扰了您,希望您先不要生气,把问题看完了杀我都可以.<br>帮助更多需要帮助的人,我等待着您的帮助!<br>---------------------------------------------------------
 
你的那个变量是类成员,访问时不会冲突的.
 
冲突的倒没有,也没出错,就是没数据显示!<br>如:<br>unit1.pas<br>procedure TTestAsp.typeapp;<br>begin<br> &nbsp;tempstr := 'jerry-okokok!';<br> &nbsp;Response.Write (tempstr);<br>end;<br><br>procedure TTestAsp.typeok;<br>var<br>testtype: TACCN;<br>begin<br> &nbsp;testtype := TACCN.Create;<br> &nbsp;Response.Write ('&lt;br&gt;-------2------&lt;br&gt;');<br> &nbsp;Response.Write (testtype.GetTypeStr);<br> &nbsp;testtype.Free;<br>end;<br><br>unit2.pas<br>implementation<br>uses unit1;<br>function TACCN.GetTypeStr: string;<br>var<br>testtype: TTestAsp;<br>begin<br> &nbsp;testtype := TTestAsp.Create;<br> &nbsp;Result := 'OK:'+testtype.tempstr;<br> &nbsp;testtype.Free;<br>end;
 
你那个tempstr不像全局变量,应该是类属性,在unit2调用时,我没见到你在哪里初始化<br>这个属性,看你贴出来的,应该是在unit1的TTestAsp.typeapp里面赋值的
 
对是在:unit1的TTestAsp.typeapp 里赋的值,然后再到unit2里把值读出来.tempstr我已经在<br>public<br> &nbsp; &nbsp;tempstr: string;<br>里定义过...
 
路过的朋友随便顶顶,给个例子都行嘛....<br>麻烦各位啦,小的真的急坏了.[:(]
 
用BPL包!
 
testtype := TTestAsp.Create;<br> &nbsp;Result := 'OK:'+testtype.tempstr;<br> &nbsp;testtype.Free;<br><br>你的TTestAsp类有没有初始化那个tempstr啊
 
procedure TTestAsp.typeapp;<br>begin<br> &nbsp;tempstr := 'jerry-okokok!';//这里你应该加上self;例如:self.tempstr:='jerry-okokok!'<br> &nbsp;Response.Write (tempstr);//同样加入self.tempstr;<br>end;
 
回jingtao,没有初始化也...能说一下怎么个初始法吗?多谢!
 
非常感谢woyaoying的再出出手,加上self了但还是不行?<br>能告诉我self是什么意思吗?<br>多谢看贴的朋友.
 
其实uint1和unit2之间互相调用不好,最好是再建一个单元unit3,在unit3中定义tempstr,然后unit1和unit2都uses unit3,或则把tempstr设为全局变量
 
function TACCN.GetTypeStr: string;<br>var<br>testtype: TTestAsp;<br>begin<br> &nbsp;testtype := TTestAsp.Create;<br> &nbsp;Result := 'OK:'+testtype.tempstr;//你这句在创建对象的时候没有处始化那肯定是空值拉.<br> &nbsp;testtype.Free;<br>end; <br>//Unit1 这里虽然赋值了, 但是你在function TACCN.GetTypeStr: string;<br>//里面的对象是有创建一次的,所以根本不是你赋值的那个对象; <br>procedure TTestAsp.typeapp;<br>begin<br> &nbsp;tempstr := 'jerry-okokok!';<br> &nbsp;Response.Write (tempstr);<br>end;<br>//举个简单的列子<br> TmyObject = class<br> &nbsp; public<br> &nbsp; &nbsp; TmpStr: String<br> &nbsp; end;<br>//现在我定义两个对象变量<br>var<br> &nbsp;myObject1, myObject2: TmyObject;<br>begin<br> &nbsp;myObject1 := TmyObject.Create;<br> &nbsp;myObject1.TmpStr := 'OK';<br> &nbsp;myObject2 := TmyObject.Create;<br> &nbsp;Showmessage( myObject2.TmpStr)//这里显示出来肯定是个空值;<br> //因为他们是两个对象.<br> &nbsp;myObject1.free;<br> &nbsp;myObject2.free;<br>end;<br>//你可以定义一个全局变量. 你现在定义的不是全局变量.你可以在<br>//每个Unit 的 var后面定义就可以了.
 
//你可以定义一个全局变量. 你现在定义的不是全局变量.你可以在<br>//每个Unit 的 var后面定义就可以了.<br>var后台定义是指那?如下吗?<br>var<br> &nbsp;tempstr: string;<br>implementation<br>但unit2就访问不了啦?<br>全局变量不是在:<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br>中定义的吗?
 
在你Unit2.pas的implementation关键字后面加上<br>uses Unit1;<br>估计你Unit1是一个mainform的单元,所以它里面已经声明了一个Form1: TForm1;,所以你就可以Unit2里通过“Form1.tempstr”得到
 
//你可以定义一个全局变量. 你现在定义的不是全局变量.你可以在<br>//每个Unit 的 var后面定义就可以了.<br>var后台定义是指那?如下吗?<br>var<br> &nbsp;tempstr: string;<br>implementation<br>但unit2就访问不了啦?<br>全局变量不是在:<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br>中定义的吗? <br>//不是的<br>你调用的时候不用加任何对象来引用了! 只要你引用了unit1 就可以了.<br>直接调用 TempStr就可以了.
 
多人接受答案了。
 
老兄,你给我发了多少个信息呀!怎么这个多?<br>这个问题应该是初级的问题呀。初学者多数容易犯的问题。<br>function TACCN.GetTypeStr: string;<br>var<br>testtype: TTestAsp;<br>begin<br> &nbsp;testtype := TTestAsp.Create;<br> &nbsp;//testtype.typeapp;//我加的,你这里什么方法都不调用,它不是空的才怪呢<br>Result := 'OK:'+testtype.tempstr;<br> &nbsp;testtype.Free;<br>end;
 
多谢各位热情解答,本问题已经解决.非常感谢kk2000.
 
后退
顶部