一个比较弱的问题,可惜我还是不懂,:((80分)

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

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
由于各模块需要共用一些公用的过程和变量,我定义了一个Myudflib的unit,
大概是这样写的:
unit Myudflib;
interface
var
username : String;
userpass : String;
implementation
end.

在别的模块调用时,加上uses myudflib,然后就可以引用myudflib.username.....
也就是说我调用这个公用UNIT里的变量是没有问题的,可我如何在myudflib里面定义过程或函数呢?
我需要在别的模块里这样调用myudflib.addcode(code);(或别的形式,只要能达到目的),
不想用DLL,谢了各位!
 
在myudflib的public段声明后再写函数,在其它地方调用时真接用,连myudflib都可免了。
 
在里面定义个类就是了啊
 
你可以在职
unit Myudflib;
interface
var
username : String;
userpass : String;
public
procedure addcode(code)
implementation


procedure addcode(code:string)
begin
end;

end.
在其它的单元加
use myudflib


然后在代码可以直接调用此函数
....
addcode('cheng')
.......
给分吧
 
变量和过程都可以直接使用。
 
unit 单元名称;
interface
uses
***
const
**(常数声明)
var
***(变量声明)

***函数声明
implementation
uses
***
下面可以接各函数的实现部分。
引用的时候myudflib都不需要加,直接用即可。
 
to chshanghai:我原来也是这样写的,编译不通过,不知你上机试过没有?

to 吴剑明:能否给我举个例子,如何定义类,我原也曾试这样写过

unit Myudflib;
interface

type
Mylib = class;
public
class procedure addcode(code)
//编译出错在这一行,换成下一行也一样出错!
// procedure addcode(code)

end;

var
username : String;
userpass : String;

implementation
 
你虽然定义了方法,但是却没有实现他,当然会给个错误你啦。
 
to 吴剑明:我肯定有该函数的实现部分,只是没有贴出来而已
编译错误信息为:Unsatisfied forward or external declaration:'mylib.addcode'
 
这句话的意思就是说你没有实现那个方法。
你把你完整的代码贴出来。
 
unit Myudflib;

interface

var
username : String;
userpass : String;

procedure addcode(code)

implementation

procedure addcode(code:string)
begin
...
end;

end.

在其它的单元加
use myudflib

然后在代码可以直接调用此函数
...
addcode('cheng')
...
 
只要将“chshanghai”代码中的行 procedure addcode(code:string)
改成 procedure Formname.addcode(code:string)即可;
“Formname”为“Myudflib”对应的窗体名。

 
unit Myudflib;
interface

type
Mylib = class <--不知是不是你笔误,不能有;号
public
procedure addcode(code);
end;

var
username : String;
userpass : String;
 
你怎么贴出来的代码两次都不同的?
给个例子你:

unit Myudflib;

interface
type
Tmyclass = class
public
username : String;
userpass : String;

procedure addcode(code)
end;
implementation

procedure Tmyclass.addcode(code:string)
begin
...
end;

end.

>>“Formname”为“Myudflib”对应的窗体名。
这句话不完全正确。应该是对应的类名。因为有时候是自定义的类而不是窗口。
 
你这样做,一定可以,我试了一下:

unit Myudflib;

interface

type
TUser=Class

private
{ Private declarations }

public
{ Public declarations }
username : String;
userpass : String;
constructor Create(Ausername:String);
procedure AddCode(Auserpass:String);
end;

implementation

{ User }

procedure TUser.AddCode(Auserpass: String);
begin
userpass:=Auserpass;
end;

constructor TUser.Create(Ausername: String);
begin
username:=Ausername;
end;

end.


测试程序:

unit frmTest;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,Myudflib;

type
TForm1 = class(TForm)
btnAddCode: TButton;
btnShowUser: TButton;
procedure btnAddCodeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnShowUserClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
User:TUser;
implementation


{$R *.DFM}

procedure TForm1.btnAddCodeClick(Sender: TObject);
begin
User.AddCode('zz');
ShowMessage(User.userpass);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
User:=TUser.create('Lucky');
end;

procedure TForm1.btnShowUserClick(Sender: TObject);
begin
ShowMessage(User.username);
end;

end.

 
同意楼上这位~~~~
 
我终于明白我出错在什么地方了,谢谢各位,只是分少了,不能一一分到
 
后退
顶部